【发布时间】:2023-03-20 23:45:01
【问题描述】:
我正在尝试使用 python 使用 botframework 在 Skype 中创建一个非常简单的机器人。 这是我做的步骤。
- 在资源中创建了一个频道机器人。
- 使用烧瓶创建了一个简单的 python Web 服务来接收来自机器人的消息。通过 ngrok 公开它并在消息传递端点中添加相同的内容。
-
我通过网络聊天测试了机器人,我在我的 python 网络服务中得到了一个 json
{ "recipient": { "id": "txBot@b0X6R31x6uQ", "name": "txBot" }, "from": { "id": "1xFUIEqdQfv", "name": "You" }, "entities": [ { "supportsTts": true, "supportsListening": true, "type": "ClientCapabilities", "requiresBotState": true } ], "locale": "en", "timestamp": "2018-11-22T13:00:42.9086958Z", "channelId": "webchat", "channelData": { "clientActivityId": "1542891640077.5912976099256072.0" }, "conversation": { "id": "b5b52b9e464b4e958b1219dadedfffce" }, "serviceUrl": "https://webchat.botframework.com/", "text": "hello from test", "textFormat": "plain", "type": "message", "id": "b5b52b9e464b4e958b1219dadedfffce|0000002" } 我能够处理这个 json 并且能够在这个示例中将用户输入“来自测试的你好”获取到我的 web 服务。
我想要做的是从 python 将相同的内容返回给我的网络聊天机器人。
我也参考了以下教程。我可以回复回复,但我没有在机器人中得到回复。
后端python代码如下
import urllib
import json
import requests
import urllib2, json
from flask import Flask
from flask import request
from flask import make_response
# Flask app should start in global layout
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def webhook():
print "came inside"
req = request.get_json(silent=True, force=True)
print("Request:")
print(json.dumps(req, indent=4))
service_url=""
if req['type']=='conversationUpdate':
return ''
else:
print "got input as : ",str(req['text'])
payload = build_text_message_payload(req, req['text'])
print "---- calling service url ----"
#service_url = build_service_url2(req['serviceUrl'],req['conversation']['id'],req['id'])
service_url = build_service_url2(req['serviceUrl'],req['conversation']['id'])
print "---- Payload ----"
print payload
# where we are going to send our request
print "---- Service url ----"
print service_url
# let's send the message
response = send_to_conversation(service_url, payload)
print "****************"
print response
# always return a response
#print get_auth_token()
return "success"
def build_text_message_payload(data, text):
"""Creates a text only message dict"""
payload = {
'type': 'message/text',
'from': {
'id': data['recipient']['id'],
'name': data['recipient']['name'],
},
'recipient': {
'id': data['from']['id'],
'name': data['from']['name'],
},
'text': text,
}
return payload
def build_service_url2(service_url, cid):
"""build the service url"""
service_url = '{0}v3/conversations/{1}/activities'.format(
service_url,
cid
)
return service_url
def send_to_conversation(service_url, payload):
url="https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token"
headers1={'Content-Type':'application/x-www-form-urlencoded'}
data=urllib.urlencode({'grant_type':'client_credentials','client_id':'jhxzxk1b2-1jjk-44b4-88bd-566d09crs4sg','client_secret':'lpfgrpDBPxjsLLFC41}@','scope':'https://api.botframework.com/.default'}
req = urllib2.Request(url, headers=headers1, data=data)
resp=urllib2.urlopen(req)
ans=resp.read()
ans=json.loads(ans)
token=ans['access_token']
full_token="Bearer "+token
headers = {
"Content-Type": "application/json",
"Authorization": full_token
}
payload = json.dumps(payload)
response = requests.post(
service_url,
data=payload,
headers=headers
)
print response.text
return response
if __name__ == '__main__':
port = int(os.getenv('PORT', 5000))
print "Starting app on port %d" % port
app.run(debug=True, port=port, host='0.0.0.0')
发布回复后,我收到的回复为 200,但在网络聊天中没有收到回复。 这是我在 python 代码中得到的响应
{
"id":"b5b52b9e464b4e958b1219dadedfffce|0000003"
}
这里有什么问题?完全没有反应
获得此实现的参考。 https://chatbotslife.com/microsoft-bot-framework-on-a-bottle-13fdcc3e04e
【问题讨论】:
-
您是说您的机器人能够接收消息但不能发送消息?
-
您还需要帮助吗?
标签: python botframework skype