Files
ai-customer-service/guest-cs-stack/_fix_autoreply.py
T
2026-08-15 14:51:51 +08:00

55 lines
2.1 KiB
Python

"""Apply auto-reply fix on wakka-test-server."""
import os
import paramiko
pw = os.environ["DEPLOY_PASSWORD"]
base = os.path.dirname(os.path.abspath(__file__))
remote_stack = "/home/wakka/guest-cs-stack"
compose = "docker-compose.chat.yaml -f docker-compose.chat.test7777.yaml"
c = paramiko.SSHClient()
c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
c.connect("20.191.152.26", username="wakka", password=pw, timeout=30)
uploads = [
(os.path.join(base, "flask", "maxkb_chatwoot_bridge.py"), "/home/wakka/maxkb_chatwoot_bridge.py"),
(os.path.join(base, "flask", "app.py"), "/home/wakka/app.py"),
(os.path.join(base, "guest-cs.test.env"), f"{remote_stack}/guest-cs.test.env"),
]
sftp = c.open_sftp()
for local, remote in uploads:
with open(local, "rb") as fh:
data = fh.read().replace(b"\r\n", b"\n")
with sftp.file(remote, "w") as rf:
rf.write(data)
print("uploaded", os.path.basename(local))
sftp.close()
cmd = f"""
set -e
sudo docker cp /home/wakka/maxkb_chatwoot_bridge.py guest-chat:/opt/guest-cs/maxkb_chatwoot_bridge.py
sudo docker cp /home/wakka/app.py guest-chat:/opt/guest-cs/app.py
cd {remote_stack}
sudo docker compose -f {compose} up -d --force-recreate guest-chat
sleep 40
sudo docker exec guest-chat printenv CHATWOOT_AGENT_BOT_TOKEN
sudo docker exec guest-chat python3 -c "
import json, urllib.request
p={{'event':'conversation_updated','id':3,'account':{{'id':1}},'messages':[{{'id':888888,'content':'你好','message_type':0,'private':False,'conversation_id':3,'account_id':1,'sender':{{'name':'游客'}}}}]}}
req=urllib.request.Request('http://127.0.0.1:7788/webhook/bot1/chatwoot', data=json.dumps(p).encode(), headers={{'Content-Type':'application/json'}}, method='POST')
with urllib.request.urlopen(req, timeout=120) as r:
print('webhook', r.status, r.read()[:250])
"
sudo docker logs guest-chat 2>&1 | grep -iE 'bridge|MaxKB|401|reply_len' | tail -6
"""
print(">>> apply fix")
_, o, e = c.exec_command(cmd, timeout=240)
print(o.read().decode(errors="replace"))
err = e.read().decode(errors="replace")
if err.strip():
print(err)
c.close()