How to create a simple skype bot with python and bot framework











up vote
4
down vote

favorite












I am trying to create a very simple bot in skype with botframework using python.
Here are the steps i did.




  • Created a channels bot in resources.


enter image description here




  • Created a simple python web service using flask to receive the message from the bot. Exposed it over ngrok and added the same in the messaging endpoint.


enter image description here





  • I tested the bot from web chat and i am getting a json in my python webservice



    {
    "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"
    }


  • I am able to process this json and able to get the user input "hello from test" in this example to my webservice.



What i want to do is to return the same to my web chat bot from python.



I referred the below tutorial as well. I am able to post response back but i am not getting it in the bot.



python code of backend as below



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')


I am getting the response as 200 once i post the response , but not getting the response in webchat.
This is the response i get in python code



{
"id":"b5b52b9e464b4e958b1219dadedfffce|0000003"
}


What is wrong here ? No response at all



enter image description here



Got this reference for this implementation.
https://chatbotslife.com/microsoft-bot-framework-on-a-bottle-13fdcc3e04e










share|improve this question
























  • Are you saying your bot is able to receive messages but not send them?
    – Kyle Delaney
    Nov 27 at 1:49










  • Do you still need help?
    – Kyle Delaney
    Dec 4 at 3:56















up vote
4
down vote

favorite












I am trying to create a very simple bot in skype with botframework using python.
Here are the steps i did.




  • Created a channels bot in resources.


enter image description here




  • Created a simple python web service using flask to receive the message from the bot. Exposed it over ngrok and added the same in the messaging endpoint.


enter image description here





  • I tested the bot from web chat and i am getting a json in my python webservice



    {
    "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"
    }


  • I am able to process this json and able to get the user input "hello from test" in this example to my webservice.



What i want to do is to return the same to my web chat bot from python.



I referred the below tutorial as well. I am able to post response back but i am not getting it in the bot.



python code of backend as below



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')


I am getting the response as 200 once i post the response , but not getting the response in webchat.
This is the response i get in python code



{
"id":"b5b52b9e464b4e958b1219dadedfffce|0000003"
}


What is wrong here ? No response at all



enter image description here



Got this reference for this implementation.
https://chatbotslife.com/microsoft-bot-framework-on-a-bottle-13fdcc3e04e










share|improve this question
























  • Are you saying your bot is able to receive messages but not send them?
    – Kyle Delaney
    Nov 27 at 1:49










  • Do you still need help?
    – Kyle Delaney
    Dec 4 at 3:56













up vote
4
down vote

favorite









up vote
4
down vote

favorite











I am trying to create a very simple bot in skype with botframework using python.
Here are the steps i did.




  • Created a channels bot in resources.


enter image description here




  • Created a simple python web service using flask to receive the message from the bot. Exposed it over ngrok and added the same in the messaging endpoint.


enter image description here





  • I tested the bot from web chat and i am getting a json in my python webservice



    {
    "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"
    }


  • I am able to process this json and able to get the user input "hello from test" in this example to my webservice.



What i want to do is to return the same to my web chat bot from python.



I referred the below tutorial as well. I am able to post response back but i am not getting it in the bot.



python code of backend as below



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')


I am getting the response as 200 once i post the response , but not getting the response in webchat.
This is the response i get in python code



{
"id":"b5b52b9e464b4e958b1219dadedfffce|0000003"
}


What is wrong here ? No response at all



enter image description here



Got this reference for this implementation.
https://chatbotslife.com/microsoft-bot-framework-on-a-bottle-13fdcc3e04e










share|improve this question















I am trying to create a very simple bot in skype with botframework using python.
Here are the steps i did.




  • Created a channels bot in resources.


enter image description here




  • Created a simple python web service using flask to receive the message from the bot. Exposed it over ngrok and added the same in the messaging endpoint.


enter image description here





  • I tested the bot from web chat and i am getting a json in my python webservice



    {
    "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"
    }


  • I am able to process this json and able to get the user input "hello from test" in this example to my webservice.



What i want to do is to return the same to my web chat bot from python.



I referred the below tutorial as well. I am able to post response back but i am not getting it in the bot.



python code of backend as below



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')


I am getting the response as 200 once i post the response , but not getting the response in webchat.
This is the response i get in python code



{
"id":"b5b52b9e464b4e958b1219dadedfffce|0000003"
}


What is wrong here ? No response at all



enter image description here



Got this reference for this implementation.
https://chatbotslife.com/microsoft-bot-framework-on-a-bottle-13fdcc3e04e







python botframework skype






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 23 at 7:06

























asked Nov 22 at 13:59









lost Coder

148219




148219












  • Are you saying your bot is able to receive messages but not send them?
    – Kyle Delaney
    Nov 27 at 1:49










  • Do you still need help?
    – Kyle Delaney
    Dec 4 at 3:56


















  • Are you saying your bot is able to receive messages but not send them?
    – Kyle Delaney
    Nov 27 at 1:49










  • Do you still need help?
    – Kyle Delaney
    Dec 4 at 3:56
















Are you saying your bot is able to receive messages but not send them?
– Kyle Delaney
Nov 27 at 1:49




Are you saying your bot is able to receive messages but not send them?
– Kyle Delaney
Nov 27 at 1:49












Do you still need help?
– Kyle Delaney
Dec 4 at 3:56




Do you still need help?
– Kyle Delaney
Dec 4 at 3:56

















active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53432607%2fhow-to-create-a-simple-skype-bot-with-python-and-bot-framework%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown






























active

oldest

votes













active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53432607%2fhow-to-create-a-simple-skype-bot-with-python-and-bot-framework%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

What visual should I use to simply compare current year value vs last year in Power BI desktop

How to ignore python UserWarning in pytest?

Alexandru Averescu