如何使用python和bot框架创建简单的Skype bot

时间:2018-11-22 13:59:02

标签: python botframework skype

我正在尝试使用python使用botframework在skype中创建一个非常简单的bot。 这是我所做的步骤。

  • 在资源中创建了一个渠道漫游器。

enter image description here

  • 使用flask创建了一个简单的python网络服务,以接收来自bot的消息。通过ngrok对其进行了公开,并在消息传递端点中对其进行了添加。

enter image description here

  • 我通过网络聊天测试了该漫游器,并在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"
}

这是怎么了?完全没有回应

enter image description here

为此实现获取了此参考。 https://chatbotslife.com/microsoft-bot-framework-on-a-bottle-13fdcc3e04e

1 个答案:

答案 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

的库