我正在尝试使用python使用botframework在skype中创建一个非常简单的bot。 这是我所做的步骤。
我通过网络聊天测试了该漫游器,并在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并将用户输入“来自测试的hello”输入到我的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
答案 0 :(得分:-2)
因为,据我所知,基于skype bot sdk(基于dotnet)的应用程序应该大声播放至蔚蓝,然后再添加到skype中就可以了。该sdk与Microsoft Skype服务器一起处理请求和响应。
观看此视频,它将为您带来帮助[https://iulia-codes.github.io/notes/guides/build-your-own-skype-bot-with-these-simple-steps/“ 我想看到这个简化了Python“ https://github.com/denissa4/skype_chatbot”
的库