2
1

More than 3 years have passed since last update.

Delphi10 でTwilio apiを叩いて発信+ボイスメッセージ

Posted at

はじめに

ほぼ前回の記事の使い回しですが、 Twilio のapiを使って発信を行い
音声合成によるボイスメッセージを送ってみました。
全く同じソースでWindows、Android共に動作します。

画面作成

以下の画面イメージの様に必要なコンポーネントを配置します。
image.png

ソースリスト

unit rest1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, REST.Types,
  FMX.Controls.Presentation, FMX.StdCtrls, Data.Bind.Components,
  Data.Bind.ObjectScope, REST.Client, REST.Authenticator.Basic, FMX.ScrollBox,
  FMX.Memo, FMX.Edit;

type
  TForm1 = class(TForm)
    RESTClient1: TRESTClient;
    btn_send: TButton;
    HTTPBasicAuthenticator1: THTTPBasicAuthenticator;
    RESTRequest1: TRESTRequest;
    RESTResponse1: TRESTResponse;
    Memo1: TMemo;
    ed_message: TEdit;
    ed_account: TEdit;
    ed_token: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    ed_to: TEdit;
    Label5: TLabel;
    ed_from: TEdit;
    btn_dial: TButton;
    Label6: TLabel;
    ed_voice: TEdit;
    procedure btn_sendClick(Sender: TObject);
  private
    { private 宣言 }
  public
    { public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.btn_sendClick(Sender: TObject);
var action : String;
begin
  HTTPBasicAuthenticator1.Username := ed_account.Text;
  HTTPBasicAuthenticator1.Password := ed_token.Text;

  RESTRequest1.Method := rmPost;
  RESTRequest1.Client := RESTClient1;
  RESTRequest1.Response := RESTResponse1;

  if Sender = btn_send then
    action := 'Messages.json'
  else if Sender = btn_dial then
    action := 'Calls.json'
  else
    exit;
  RESTClient1.BaseURL :=
      format('https://api.twilio.com/2010-04-01/Accounts/%s/%s',[ed_account.text,action]);
  RESTClient1.Authenticator := HTTPBasicAuthenticator1;
  with RESTClient1.Params do
  begin
    Clear;
    if action = 'Messages.json' then
      AddItem('Body',ed_message.Text)
    else if action = 'Calls.json' then
      AddItem('Twiml',
        format('<Response><Say language="ja-JP" voice="alice">%s</Say></Response>',[ed_voice.text]));
    AddItem('To',ed_to.Text);
    AddItem('From',ed_from.Text);
  end;
  RESTRequest1.Execute;
  memo1.lines.text := RESTResponse1.Content;
end;

end.

実行

入力ボックスにパラメータを入れてDialボタンを押すと、スマホに着信しました。
ガイダンスメッセージの後で、着信画面のボタンを押すと女性の声で指定した
メッセージを読み上げてくれます。(日本語指定にすると漢字も読んでくれます。)
※最初はボタンを押すことに気が付かず、音声メッセージが流れないぞと
 さんざん悩んでしまいました。(恥)

画面下のメモコンポーネントにレスポンス内容を表示しますので、上手くいかない場合は
エラー内容を頑張って読み解いてください。
To:には携帯番号の頭に+81(日本の国番号)をつけています。
SMSの場合は先頭のゼロをつけても動作しましたが、発信の場合は先頭のゼロを
取り除いておかないと着信しませんでした。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1