ringurla
ringurla

Reputation: 1

Twilio - Quick question (Unable to update record)

hope you are doing it right these days.

To summarize my problem, I think this is not working becuase I am using a free Twilio account instead of a paid one. But that's just my beginner theory. Now, the issue:

I have tried an official Twilio tutorial (https://www.twilio.com/blog/automating-ngrok-python-twilio-applications-pyngrok, I shared the link in case someone finds it interesting or needs it), which allows us to automate SMS webhook (sms_url) configuration by using Client (twilio) and pyngrok (ngrok).

def start_ngrok():
   from twilio.rest import Client
   from pyngrok import ngrok

   url = ngrok.connect(5000)
   print(' * Tunnel URL:', url)
   client = Client()
   client.incoming_phone_numbers.list(
       phone_number=os.environ.get('TWILIO_PHONE_NUMBER'))[0].update(
           sms_url=url + '/bot')

I can't explain all the things that I tried in the last 4 days, with no success. I keep getting the same error:

   client.incoming_phone_numbers.list(phone_number=os.environ.get('TWILIO_PHONE_NUMBER'))[0].update(sms_url=url + '/bot')
IndexError: list index out of range

Something is not working with the list, it comes empty, although environment variables are working properly. I will work with just one phone_number, so there no need for list, indeed, so I started to change that line to avoid different errors and ended up with this:

def start_ngrok():
   from twilio.rest import Client
   from pyngrok import ngrok

   url = ngrok.connect(5000)
   print(' * Tunnel URL:', url)
   client = Client()
   client.incoming_phone_numbers("my_number").update(sms_url=str(url) + '/bot')

Then I got the final error that I can't solve by my self:

 File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/twilio/rest/api/v2010/account/incoming_phone_number/__init__.py", line 442, in update
   payload = self._version.update(method='POST', uri=self._uri, data=data, )
 File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/twilio/base/version.py", line 106, in update
   raise self.exception(method, uri, response, 'Unable to update record')
twilio.base.exceptions.TwilioRestException: 
HTTP Error Your request was:

POST /Accounts/my_account_SID/IncomingPhoneNumbers/+my_number.json

Twilio returned the following information:

Unable to update record: The requested resource /2010-04-01/Accounts/my_account_SID/IncomingPhoneNumbers/+my_number.json was not found

More information may be available here:

https://www.twilio.com/docs/errors/20404

I tried all different phone numbers combinations/formats: nothing works.

Thanks for your time reading all this!

Upvotes: 0

Views: 945

Answers (1)

Alan
Alan

Reputation: 10781

Looks like something changed since the blog was written or there was a mistake.

Try the below:

  • The only difference is adding .public_url to the url object. Also allowed a GET to /bot for testing.
from dotenv import load_dotenv
from flask import Flask, request
from twilio.twiml.messaging_response import MessagingResponse

load_dotenv()
app = Flask(__name__)


@app.route('/bot', methods=['POST','GET'])
def bot():
    user = request.values.get('From', '')
    resp = MessagingResponse()
    resp.message(f'Hello, {user}, thank you for your message!')
    return str(resp)


def start_ngrok():
    from twilio.rest import Client
    from pyngrok import ngrok

    url = ngrok.connect(5000)
    print('This is',url)
    print(' * Tunnel URL:', url)
    client = Client()
    client.incoming_phone_numbers.list(
    phone_number=os.environ.get('TWILIO_PHONE_NUMBER'))[0].update(
        sms_url=url.public_url + '/bot')


if __name__ == '__main__':
    if os.environ.get('WERKZEUG_RUN_MAIN') != 'true':
        start_ngrok()
    app.run(debug=True)

Upvotes: 0

Related Questions