Twilio API с node.js для проверки телефона

2020-10-04

Twilio — поставщик услуг связи, предоставляющий аудио, текстовые, видео и другие API-сервисы для приложений. Проверка номера телефона с помощью SMS является очень распространенной задачей для многих приложений, особенно в процессе регистрации, а также при проверке безопасности удаленного входа в систему.

Проверка номера телефона с использованием Twilio SMS API и node.js

Easiio предоставляет облачную базовую телефонную систему, колл-центр и поддержку в чате на веб-сайте. Автоматический ответ системы, такой как IVR (интерактивный голосовой ответ) и ITR (интерактивный текстовый ответ), можно настроить для вызова API своей стороны, например HTTP API, предоставляемого node.js и JavaScript.

В этом примере я покажу, как легко создать ITR (чат-бот) для сбора номера телефона пользователя, отправить вызов HTTP API к API node.js, написанному на JavaScript, для генерации кода проверки и вызвать Twilio API для отправки SMS. на мобильный телефон посетителя сайта. Тем самым он завершает проверку номера мобильного телефона пользователя и может использоваться для регистрации на веб-сайте, подписки и других приложений. API node.js для кода проверки SMS можно использовать автономно. Вы можете использовать его для своих собственных приложений.

Шаг 1. Напишите API node.js для API Twilio.

API-интерфейс twilio node.js состоит из двух частей. Первая часть — это генерация случайного 6-значного кода проверки и сохранение его в хранилище Redis.

var number = Math.floor(Math.random() * 899999 + 100000);
...
redisClient.set(formData.phone, number);
redisClient.expire(formData.phone, 600); // setting expiry for 10 minutes.

Вторая часть — отправка SMS-сообщения через Twilio API.

       client.messages
          .create({
             body: 'Your Easiio verification code: ' + number,
             from: '+15614492296',
             to: formData.phone
           })
          .then(message => console.log(message.sid));

Вот фрагмент кода для отправки SMS. Убедитесь, что вы установили Redis на node.js с помощью команды «npm install redis» и установили API twilio с помощью «npm install twilio».

else if (request.url === "/send_verification_code_itr") {
      var requestBody = '';
      request.on('data', function(data) {
        requestBody += data;
        if(requestBody.length > 1e7) {
          response.writeHead(413, 'Request Entity Too Large', {'Content-Type': 'text/html'});
          response.end('<!doctype html><html><head><title>413</title></head><body>413: Request Entity Too Large</body></html>');
        }
      });
      request.on('end', function() {
        console.log("post end", requestBody);
        var formData = JSON.parse( requestBody );
        var number = Math.floor(Math.random() * 899999 + 100000);
        console.log("send sms twilio phone: ", formData.phone);
        const client = require('twilio')(accountSid, authToken);
        redisClient.set(formData.phone,number);
        redisClient.expire(formData.phone,600); // setting expiry for 10 minutes.
        // create and send the client message
        client.messages
          .create({
             body: 'Your Easiio verification code: ' + number,
             from: '+15614492296',
             to: formData.phone
           })
          .then(message => console.log(message.sid));
        response.write('[ { "id": 1, "action": "play", "text": "The varification code send via sms: ' + number + '" }]');
        response.end('');
      });
    }

Запустите node.js, выполнив команду «node twilio_sms.js». Затем вы можете протестировать API с помощью следующей командной строки, используя Curl. Обязательно измените localhost на адрес вашего хоста.

curl -H "Content-Type:application/json" -X POST -d '{"name":"John Doo","phone":"9254449999"}' http://localhost:1337/send_verification_code_itr

После завершения проверки отправки. Есть еще один API для проверки кода. Получив номер телефона и код подтверждения через HTTP API, эта часть может использовать номер телефона для получения кода из Redis и сравнения значения для проверки. Он возвращает успех или неудачу, зависит от результата. Его можно протестировать с помощью командной строки Curl.

else if (request.url === "/check_varification_code") {
      var requestBody = '';
      request.on('data', function(data) {
        requestBody += data;
        if(requestBody.length > 1e7) {
          response.writeHead(413, 'Request Entity Too Large', {'Content-Type': 'text/html'});
          response.end('<!doctype html><html><head><title>413</title></head><body>413: Request Entity Too Large</body></html>');
        }
      });
      request.on('end', function() {
        console.log("post end", requestBody);
        var formData = JSON.parse( requestBody );

        console.log("post end code: ", formData.code, " phone: ", formData.phone);

        var code = redisClient.get(formData.phone,function(err,reply) {

          if(err) {
            console.log ("Error in redis.");
            response.write('[ { "id": 1, "action": "play", "text": "Error in redis.' + queryObject.code + '" }]');
            response.end('');
          }
          if(reply === null) {
            console.log ("Invalid email address.");
            response.write('[ { "id": 1, "action": "play", "text": "Invalid email address: ' + email + '" }]');
            response.end('');
            return 1;
          }
          return_code = reply;
          console.log ("email check return_code:." + reply);
          if (return_code == formData.code) {
            console.log("verification successful. ", formData.phone, " ", return_code);
            response.writeHead(200, {'Content-Type': 'text/html'});
            response.write('<!doctype html><html><head><title>email verification successful</title></head><body>email verification successful</body></html>');
            response.end();
          } else {
            response.writeHead(200, {'Content-Type': 'text/html'});
            response.write('<!doctype html><html><head><title>email verification failed</title></head><body>email verification failed. Please try again</body></html>');
            response.end();
          } 
        });
      });
    }
curl -H "Content-Type:application/json" -X POST -d '{"code":"661871","phone":"9254449999"}' http://localhost:1337/check_varification_code

Полный исходный код доступен на GitHub. twilio_sms.js.

Шаг 2. Настройте Easiio ITR (чат-бот) для вызова API

Если у вас нет учетной записи Easiio, зарегистрируйтесь бесплатный. Войдите в серверную часть учетной записи Easiio. Дополнительные инструкции по настройке Easiio можно найти здесь. Руководство по плагину Easiio Web Chat.

Откройте «Расширенные настройки» и выберите «Визуальный IVR». Создайте новую IRT или используйте существующую. В моем случае для тестирования я буду использовать нашу демонстрацию/пекарню ITR. Я создал новую запись в меню первого уровня под названием «Подтвердить номер телефона». Настроил форму так, как показано на следующем рисунке. Обратите внимание на имя формы, которая создается с помощью «Расширенной настройки» рядом с «Формой IVR». Установка URL-адреса API node.js для отправки кода подтверждения в предыдущем разделе. Затем добавьте вызов в форму подтверждения, как только Twilio отправит код подтверждения по SMS.

Визуальная конфигурация ITR для проверки номера телефона
Конфигурация ITR для формы сбора номеров телефонов

Во второй форме используется проверка телефона.

Форма для подтверждения проверочного кода.

Шаг 3. Проверьте Twilio API и ITR.

Проверьте вызов ITR/чат-бота к API Twilio SMS node.js, открыв созданный ITR. В моем случае я открываю https://easiio.com/demo. После появления всплывающего окна чата я выбираю меню «Подтвердить номер телефона». Введите имя и телефон, нажмите «Отправить», чтобы получить мои SMS от службы SMS Twilio. Затем я еще раз ввожу номер телефона и код подтверждения по телефону, затем нажимаю завершить проверку.

Чат-бот ITR с использованием плагина веб-чата Easiio

Вывод:

В этом блоге показано, как создать API проверки телефона с помощью API Twilio SMS на node.js. API Twilio очень прост в использовании. Этот пример API можно использовать автономно без Easiio. Имейте в виду, что вам понадобится больше кода обработки ошибок, чтобы сделать создание кода более удобным. Easiio предоставляет очень мощный плагин чат-бота для веб-сайта (ITR). Он имеет множество мощных функций, таких как функция формы, показанная в этом примере. Вы можете подписаться на бесплатно и используйте его на своем веб-сайте.

Больше информации:

https://www.easiio.com/use-node-js-and-cloudmailin-api-to-send-emails-from-chat