I have setup TwiMl on eroku in Python. When I call user A from user B, user A didn't get call and VOIP also, while user B is got bot message like "thanks for calling".
When I try to placeCall
to user B from PostMan
, user B gets call and also got bot message like "thanks for calling".
PostMan URL : https://myapp.herokuapp.com/placeCall
My requirement is when I call user A from application user B will get call and both can able to communicate.
Requirement
Flask==0.10.1
Jinja2==2.7.3
MarkupSafe==0.23
Werkzeug==0.9.6
httplib2==0.9
itsdangerous==0.24
six==1.*
twilio
wsgiref==0.1.2
Here is my Python TwiMl Code.
import os
from flask import Flask, request
from twilio.jwt.access_token import AccessToken
from twilio.jwt.access_token.grants import VoiceGrant
from twilio.rest import Client
import twilio.twiml
ACCOUNT_SID = 'ACxxxxxxxx'
API_KEY = 'SKxxxxxxxx'
API_KEY_SECRET = 'TSxxxxxxxx'
PUSH_CREDENTIAL_SID = 'CRxxxxxxxx'
APP_SID = 'APxxxxxxxx'
app = Flask(__name__)
@app.route('/test', methods=['GET', 'POST'])
def test():
req_json = request.get_json(force=True)
UserName = req_json['username']
Password = req_json['password']
return str(UserName)
@app.route('/accessToken')
def token():
IDENTITY = request.args.get('identity')
account_sid = os.environ.get("ACCOUNT_SID", ACCOUNT_SID)
api_key = os.environ.get("API_KEY", API_KEY)
api_key_secret = os.environ.get("API_KEY_SECRET", API_KEY_SECRET)
push_credential_sid = os.environ.get("PUSH_CREDENTIAL_SID", PUSH_CREDENTIAL_SID)
app_sid = os.environ.get("APP_SID", APP_SID)
grant = VoiceGrant(push_credential_sid=push_credential_sid,outgoing_application_sid=app_sid)
token = AccessToken(account_sid, api_key, api_key_secret, IDENTITY)
token.add_grant(grant)
return str(token)
@app.route('/outgoing', methods=['GET', 'POST'])
def outgoing():
req_json = request.get_json(force=True)
CALLER_ID = req_json['callerid']
resp = twilio.twiml.VoiceResponse()
dial = Dial()
dial.client(CALLER_ID)
resp.append(dial)
#resp.say("Congratulations! You have made your first oubound call! Good bye.")
#resp.say("Thanks for Calling.",voice='woman',)
return str(resp)
@app.route('/incoming', methods=['GET', 'POST'])
def incoming():
resp = twilio.twiml.VoiceResponse()
#resp.say("Congratulations! You have received your first inbound call! Good bye.")
#resp.say("Thanks for Calling.",voice='woman',)
return str(resp)
@app.route('/placeCall', methods=['GET', 'POST'])
def placeCall():
req_json = request.get_json(force=True)
IDENTITY = req_json['identity']
CALLER_ID = req_json['callerid']
account_sid = os.environ.get("ACCOUNT_SID", ACCOUNT_SID)
api_key = os.environ.get("API_KEY", API_KEY)
api_key_secret = os.environ.get("API_KEY_SECRET", API_KEY_SECRET)
client = Client(api_key, api_key_secret, account_sid)
call = client.calls.create(url=request.url_root + 'incoming', to='client:' + CALLER_ID, from_='client:' + IDENTITY)
return str(call.sid)
@app.route('/', methods=['GET', 'POST'])
def welcome():
resp = twilio.twiml.VoiceResponse()
resp.say("Welcome")
return str(resp)
if __name__ == "__main__":
port = int(os.environ.get("PORT", 5000))
app.run(host='0.0.0.0', port=port, debug=True)
Error Logs
TwiML setting on twilio dashboard
Request URL : https://myapp.herokuapp.com/outgoing
Please let me know is there anything that I missed to configure or something that I have done wrong.
Tutorial that I followed to configure TwiML is Here