2020年 1月 の投稿一覧

Twilio+ngrok Twilio番号に着信があった場合のWebhookのREQUEST (A CALL COMES IN)

Twilioを利用する必要が出たので、ドキュメントを見ながらAPIなどを確認中

いろいろ機能はあるけど、まずは基本の部分を見てみる。
LINEボットなどと同様にTwilioのconsoleから着信時にHTTPのWebhookを設定できるので、サーバーにおいてもいいけど、ngrokが楽だよとドキュメントにもあるので、利用してみる。

ngrokにアカウント登録して、実行するとngrok.ioのサブドメインへのアクセスを実行してるローカルマシンの8000にフォワードしてくれる。

ngrok by @inconshreveable                                       (Ctrl+C to quit)

Session Status                online
Account                       droid (Plan: Free)
Version                       2.3.35
Region                        United States (us)
Web Interface                 http://127.0.0.1:4040
Forwarding                    http://704be30b.ngrok.io -> http://localhost:8000
Forwarding                    https://704be30b.ngrok.io -> http://localhost:8000

なので、上記でいう「http://704be30b.ngrok.io」を公開URLとして、
Twilioのコンソールで
http://704be30b.ngrok.io/callback.php
を「Programmable Voice」の「受電したい番号」から「A CALL COMES IN」のWebhookURLを設定

?php
// パラメータが見たいだけなので、TwilioSDKは今回不要
error_log(print_r($_REQUEST, true));

上記に加えて受信スクリプトを配置した場所で実行して、Twilioの番号に電話をかける

RC211v:app dp$ php -S localhost:8000
PHP 7.3.5 Development Server started at Fri Jan 24 12:53:18 2020
Listening on http://localhost:8000
Document root is /Users/dp/projects/twilio/app
Press Ctrl-C to quit.
[Fri Jan 24 12:54:13 2020] [::1]:62430 [200]: /callback.php
[Fri Jan 24 12:56:26 2020] Array
(
    [Called] => +125647****Twilioで取得した受電番号
    [ToState] => AL
    [CallerCountry] => JP
    [Direction] => inbound
    [CallerState] =>
    [ToZip] => 35739
    [CallSid] => CA7f52ed3ec************************
    [To] => +125647****Twilioで取得した受電番号
    [CallerZip] =>
    [ToCountry] => US
    [ApiVersion] => 2010-04-01
    [CalledZip] => 35739
    [CalledCity] => ELKMONT
    [CallStatus] => ringing
    [From] => +81801234発信者番号
    [AccountSid] => AC31a5******************************
    [CalledCountry] => US
    [CallerCity] =>
    [Caller] => +81801234発信者番号
    [FromCountry] => JP
    [ToCity] => ELKMONT
    [FromCity] =>
    [CalledState] => AL
    [FromZip] =>
    [FromState] =>
)

カンファレンスなどでFromを判定したりするには、$_REQUESTのformなどを元にすればいいということか。

–>

pyenvで3.7.xのインストールでエラー( ModuleNotFoundError: No module named ‘_ctypes’)

ROS2の環境構築でpyenvで3.7.xをインストールしようとしたらエラーが発生
最小インストール後に、mac用のWifiドライバーなどを軽く入れたくらいなので、ライブラリが足りなかった。

droid@rc211v-usb:~$ pyenv install 3.7.4
Downloading Python-3.7.4.tar.xz...
-> https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz
Installing Python-3.7.4...

BUILD FAILED (Ubuntu 18.04 using python-build 1.2.16)

Inspect or clean up the working tree at /tmp/python-build.20200109175000.3042
Results logged to /tmp/python-build.20200109175000.3042.log

Last 10 log lines:
  File "/tmp/tmpge7ufapu/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/commands/__init__.py", line 6, in 
  File "/tmp/tmpge7ufapu/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/commands/completion.py", line 6, in 
  File "/tmp/tmpge7ufapu/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/cli/base_command.py", line 20, in 
  File "/tmp/tmpge7ufapu/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/download.py", line 37, in 
  File "/tmp/tmpge7ufapu/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/utils/glibc.py", line 3, in 
  File "/tmp/python-build.20200109175000.3042/Python-3.7.4/Lib/ctypes/__init__.py", line 7, in 
    from _ctypes import Union, Structure, Array
ModuleNotFoundError: No module named '_ctypes'
Makefile:1132: recipe for target 'install' failed
make: *** [install] Error 1
droid@rc211v-usb:~$ sudo apt install libffi-dev

PHPでBOMを削除 ( remove \xEF\xBB\xBF | U+FEFF | efbbbf)

LINE messaging APIでTextファイルを受信した際に、BOMがついており先頭の空白削除がうまく動作しなかったので、PHPでUTF8のBOMを削除する方法がいくつかあったのでメモ

preg_replaceで削除するパターン
今回はこっちを使って削除

return preg_replace("/^\xEF\xBB\xBF/", '', $text);

U+FEFFで指定するパターン

$str = preg_replace('/\x{FEFF}/u', '', $file);

hexで削除するパターン

function remove_utf8_bom_head($text) {
    if(substr(bin2hex($text), 0, 6) === 'efbbbf') {
        $text = substr($text, 3);
    }
    return $text;
}

PHPでBOM削除で検索すると、自分が前に公開していたJSONから削除する記事が上位に表示され恥ずかしい。

https://stackoverflow.com/questions/10290849/how-to-remove-multiple-utf-8-bom-sequences