<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Vongxai xys</title>
    <description>The latest articles on DEV Community by Vongxai xys (@vongxaixys0105).</description>
    <link>https://dev.to/vongxaixys0105</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1092582%2F442e55a4-180e-4133-b95d-04a503a9d78e.jpeg</url>
      <title>DEV Community: Vongxai xys</title>
      <link>https://dev.to/vongxaixys0105</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vongxaixys0105"/>
    <language>en</language>
    <item>
      <title>ວິທີສ້າງ API ສົ່ງ SMS OTP ແລະ Verify ໂດຍໃຊ້ Twilio ໃນ Go ແບບງ່າຍໆ</title>
      <dc:creator>Vongxai xys</dc:creator>
      <pubDate>Fri, 02 Jun 2023 08:04:26 +0000</pubDate>
      <link>https://dev.to/vongxaixys0105/withiisaang-api-song-sms-otp-eila-verify-odnyays-twilio-ayn-go-eibbngaany-3nhb</link>
      <guid>https://dev.to/vongxaixys0105/withiisaang-api-song-sms-otp-eila-verify-odnyays-twilio-ayn-go-eibbngaany-3nhb</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;ບົດຄວາມນີ້ເຮົາຈະມາລອງສ້າງ api ສົ່ງ sms otp ໄປຫາເບີໂທຜູ້ໃຊ້ໂດຍໃຊ້ twilio ໃນ go ມັນຈະມີວິທີການເຮັດແນວໃດໄປເບິ່ງກັນເລີຍ.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
&lt;p&gt;ກ່ອນອື່ນເຮັດລະບົບສົ່ງ otp ເພື່ອຫຍັງ: ຄືອົງກອນຕ່າງໆຈະຫາວິທີຈັດການເພື່ອຕ້ານໄພຄຸກຄາມໃຫ້ມີຊ່ອງໂຫວໜ້ອຍທີ່ສຸດເທົ່າທີຈະເຮັດໄດ້ເພື່ອຄວາມປອດໃຜຕໍ່ລະບົບຂອງຕົນເອງ. ສະນັ້ນການທີ່ຈະໃຫ້ຜູ້ໃຊ້ທົ່ວໄປມາໃຊ້ລະບົບດັ່ງກ່າວເຊັນ: login, register reset password...ອື່ນໆທີ່ມີເປັນຂໍ້ມູນສ່ວນຕົວແນ່ນອນວ່າກະຕ້ອງຫາວິທີຢືນຢັນຕົວຕົນເພື່ອຄວາມປອດໄພໃນລະດັບໜຶ່ງ&lt;/p&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
&lt;h2&gt;
  
  
  ຂັ້ນຕອນ
&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;1/ ເຮົາຕ້ອງໄປສະໝັກ account ຂອງ twilio ສາມາດເຂົ້າໄປສະໝັກຕາມລິ້ງນີ້ເລີຍ &lt;a href="http://www.twilio.com/try-twilio"&gt;www.twilio.com/try-twilio&lt;/a&gt; ຖ້າຍັງບໍ່ມີ account &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RWNNkNhZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/662iyavrs7thitbel1an.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RWNNkNhZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/662iyavrs7thitbel1an.png" alt="Image description" width="800" height="647"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2/ ຫລັງຈາກນັ້ນ login&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CnXCrq-T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ki85oetz5wd1y9nnec34.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CnXCrq-T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ki85oetz5wd1y9nnec34.png" alt="Image description" width="800" height="925"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ມັນຈະເຂົ້າໜ້າ &lt;a href="http://www.console.twilio.com"&gt;www.console.twilio.com&lt;/a&gt; ເຂົາຈະໃຫ້ເຮົາສອງ key ຄື: Account SID ແລະ Auth Token ເຮົາຈະເອົາໄປໃສ່ເປັນ parameter config&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iUX9bf1o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uohamuwxb8wg430fclg6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iUX9bf1o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uohamuwxb8wg430fclg6.png" alt="Image description" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3/ ສ້າງ service sms ໃຫ້ໄປຕັ້ງຄ່າຕາມຂັ້ນຕອນໃນຮູບທີ່ບອກໄວ້ເລີຍ&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NxZpbAYP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2wr0odi6snpp1505yzov.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NxZpbAYP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2wr0odi6snpp1505yzov.png" alt="Image description" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4/ ໃຫ້ສ້າງ service Friendly name ແມ່ນໃຫ້ຕັ້ງຊື່ sevice name ຂອງເຮົາຕົວຢ່າງໃນນີ້ເຮົາຕັ້ງຊື່ວ່າ OTP demo, Verification channels ແມ່ນໃຫ້ເຮົາຕິກເອົາ sms ເພາະວ່າເຮົາຈະສົ່ງຮູບແບບເປັນ sms, Notes ໃສ່ກໍໄດ້ບໍ່ໃສ່ກໍໄດ້ແລ້ວກົດ continue ໄດ້ເລີຍ&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GIYnrqqf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1y8zbdwhbnf25sai8f7t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GIYnrqqf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1y8zbdwhbnf25sai8f7t.png" alt="Image description" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5/ ຫລັງຈາກທີ່ເຮົາສ້າງ service ສຳເລັດແລ້ວມັນຈະໃຫ້ key Service SID ເຮົາຈະເອົາໄປໃສ່ເປັນ parameter config, Code length ເປັນຈຳນວນຄວາມຍາວຂອງ code OTP ໂດຍປົກະຕິແມ່ນຈະເອົາຕາມຄ່າ default ຂອງມັນກົດ save ໄດ້ເລີຍ&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lXMEfOpv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o8e5zvrernzaxnmroda3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lXMEfOpv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o8e5zvrernzaxnmroda3.png" alt="Image description" width="800" height="391"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;ູ6/ ຕັ້ງຄ່າ SMS Geographic Permissions ເຊິ່ງຈະເປັນໂຕກຳນົດໂຊນປະເທດໃຫ້ເຮົາກັບໄປໜ້າ console ເລືອກ Vioce -&amp;gt; Settings -&amp;gt; Geo permissions ໃຫ້ເຮົາຄົ້ນຫາພິມຄຳວ່າ laos ມັນອອກມາໃຫ້ກໍຕິກເລືອກແລ້ວກົດ save ຖືວ່າສິ້ນສຸດການຕັ້ງຄ່າເທິ່ງ twilio &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--URc4wkW5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7ig75upvzd6breyhdlzs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--URc4wkW5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7ig75upvzd6breyhdlzs.png" alt="Image description" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Brn5-EXT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f9hbxz6dn7k4xzk2g3dz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Brn5-EXT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f9hbxz6dn7k4xzk2g3dz.png" alt="Image description" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ຂັ້ນຕອນການສ້າງ api ໃນ Go ກັນແລ້ວໄປລຸຍກັນ&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;1/ ໃຫ້ເຮົາໄປສ້າງໂປເຈັກເກັບໄວຢູ່ໃສກໍໄດ້ໂດຍເປີດ terminal ໃສ່ຄຳສັ່ງ&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir go-otp &amp;amp;&amp;amp; cd go-otp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EOac1eeu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4sfpproyfszkvxls545p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EOac1eeu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4sfpproyfszkvxls545p.png" alt="Image description" width="800" height="208"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ຕາມດ້ວຍການສ້າງ Go Modules ໂດຍໃສ່ຄຳສັ່ງ&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;go mod init {module_name}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2/ ເຮົາຈະໃສ່ echo framework &lt;a href="http://www.echo.labstack.com"&gt;www.echo.labstack.com&lt;/a&gt; ໃຫ້ເຮົາສ້າງຊື່ file main.go ໄວ້ເປົ່າໆ ແລະ install echo ໂດຍໃສ່ຄຳສັ່ງ&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;go get github.com/labstack/echo/v4 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;install twilio ໂດຍໃສ່ຄຳສັ່ງ&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;go get github.com/twilio/twilio-go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3/ install library ສຳລັບ config environment variable.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;go get github.com/joho/godotenv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;ສ້າງ file .env ໄວ້ໃນໂປເຈັກແລ້ວກຳນົດ key name config&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TWILIO_ACCOUNT_SID=Your_accountSID
TWILIO_AUTH_TOKEN=Your_auth_Token
TWILIO_SERVICES_ID=Your_service_SID
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ຸ4/ ສ້າງ service api ສົ່ງ sms OTP ກັນເລີຍ&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package main

import (
    "context"
    "log"
    "net/http"
    "os"

    "github.com/joho/godotenv"
    "github.com/labstack/echo/v4"
    "github.com/twilio/twilio-go"

    twilioApi "github.com/twilio/twilio-go/rest/verify/v2"
)

func init() {
    if err := godotenv.Load(".env"); err != nil {
        log.Fatal("Error loading .env file")
    }
}

func main() {
    e := echo.New()

    // Routes sendOTP
    e.POST("/sendOTP", func(c echo.Context) error {
        var body struct {
            Phone string `json:"phone"`
        }
        if err := c.Bind(&amp;amp;body); err != nil {
            return c.JSON(http.StatusBadRequest, err)
        }

        sid, err := sendOTP(c.Request().Context(), body.Phone)
        if err != nil {
            return c.JSON(http.StatusInternalServerError, err)
        }

        return c.JSON(http.StatusOK, echo.Map{
            "sid": sid,
            "msg": "OTP sent successfully",
        })
    })

    e.Logger.Fatal(e.Start(":8080"))
}

// client is the Twilio client
var client *twilio.RestClient = twilio.NewRestClientWithParams(twilio.ClientParams{
    Username: os.Getenv("TWILIO_ACCOUNT_SID"),
    Password: os.Getenv("TWILIO_AUTH_TOKEN"),
})

// sendOTP sends OTP to the given phone number
func sendOTP(ctx context.Context, phone string) (string, error) {
    params := &amp;amp;twilioApi.CreateVerificationParams{}
    params.SetTo(phone)
    params.SetChannel("sms")

    resp, err := client.VerifyV2.CreateVerification(os.Getenv("TWILIO_SERVICE_ID"), params)
    if err != nil {
        return "", err
    }

    return *resp.Sid, nil
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;6/ ທົດສອບກັນໂດຍໃຊ້ insonia ຫລື ໃຜຈະໃຊ້ tools ໂຕອື່ນກະໄດ້ຄືກັນບໍ່ວ່າກັນ&lt;br&gt;
localhost:8080/sendOTP ເບີໂທທີ່ສົ່ງໄປຈະຕ້ອງຂຶ້ນນຕົ້ນດ້ວຍ&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "phone": "+85620xxxx"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CnUM-4Qv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d25n9j73foaflj9vszzo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CnUM-4Qv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d25n9j73foaflj9vszzo.png" alt="Image description" width="800" height="251"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ມັນຕອບກັບມາ status 200 ຖືວ່າສຳເລັດ&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "msg": "OTP sent successfully",
    "sid": "VE48ad8c7f47a15d9f4479d899305aaeef"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;ແລ້ວເຮົາຈະຮູ້ໄດ້ແນວໃດວ່າມັນໄດ້ສົ່ງ sms otp ໄປຫາເບີໂທເຮົາແທ້ໄປກວດກັນ&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5v8qZ3K3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j3gptd4en0yutvn4s91q.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5v8qZ3K3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j3gptd4en0yutvn4s91q.jpg" alt="Image description" width="720" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ລືມບອກໄປວ່າໃນບົດຄວາມນີ້ເຮົາໃຊ້ account ຟີຣເຊິ່ງທາງ twilio ເຂົາຈະອະນຸຍາດໃຫ້ເຮົາໃຊ້ຟີຣປະມານໜຶ່ງເດືອນທີ່ສາມາດສົ່ງ sms ໄດ້ຖ້າເກີນໜຶ່ງເດືອນແມ່ນບໍ່ໄດ້ແລ້ວ ເຊິ່ງຂອງເຮົາກະໄດ້ໝົດອາຍຸຄືກັນ5555&lt;/p&gt;

&lt;p&gt;ກະເລີຍໄດ້ໃຊ້ key account ໂຕທີ່ສະໝັກເສຍເງິນເຮົາບໍ່ສາມາດເປີດໃຫ້ເຫັນ title sms ໄດ້&lt;br&gt;
ຖ້າໃຜທີ່ຍັງບໍ່ເຄີຍສະໝັກແລ້ວໄປສະໝັກແລ້ວເຮັດຕາມຂັ້ນຕອນຕັ້ງຄ່າຕາມທີ່ເຮົາບອກມາດ້ານເທິງແມ່ນສາມາດສົ່ງ sms ໄດ້ແນ່ນອນ&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;7/ ສ້າງ service api verify OTP&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Routes verifyOTP
    e.POST("/verifyOTP", func(c echo.Context) error {
        var body struct {
            Phone string `json:"phone"`
            Code  string `json:"code"`
        }
        if err := c.Bind(&amp;amp;body); err != nil {
            return c.JSON(http.StatusBadRequest, err)
        }

        if err := verifyOTP(c.Request().Context(), body.Phone, body.Code); err != nil {
            return c.JSON(http.StatusInternalServerError, err)
        }

        return c.JSON(http.StatusOK, echo.Map{
            "msg": "OTP verified successfully",
        })
    })

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// verifyOTP verifies the given OTP
func verifyOTP(ctx context.Context, phone, code string) error {
    params := &amp;amp;twilioApi.CreateVerificationCheckParams{}
    params.SetTo(phone)
    params.SetCode(code)

    resp, err := client.VerifyV2.CreateVerificationCheck(os.Getenv("TWILIO_SERVICE_ID"), params)
    if err != nil {
        return err
    }
    if *resp.Status != "approved" {
        return errors.New("invalid code")
    }

    return nil
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;8/ ສຸດທ້າຍຂໍທ້າຍສຸດດ້ວຍການທົດສອບ verify otp&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "phone": "+85620xxxx,
    "code": "143464"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZlzfCZjV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/39vd0uezbywssguth6mj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZlzfCZjV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/39vd0uezbywssguth6mj.png" alt="Image description" width="800" height="140"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ມັນຕອບກັບມາ status 200 ສະແດງວ່າ verify ຖືກຕ້ອງເຢ້ໆ5555&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "msg": "OTP verified successfully"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;ມາຮອດນີ້ຖືວ່າໄດ້ສຳເລັດແລ້ວກັບການສ້າງ API ສົ່ງ SMS OTP ແລະ Verify ໂດຍໃຊ້ Twilio ໃນ Go ແບບງ່າຍໆ&lt;/p&gt;

&lt;p&gt;ຖ້າມີຂໍ້ຜິດພາດປະການໃດ ຫລື ມີສິ່ງໃດຢາກນຳແນະກໍແນະນຳໄດ້ເດີ້ ຜູ້ຂຽນເອງຫາກໍລອງໃຊ້&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  ຈົດໄວ້ຢ້ານລືມ5555
&lt;/h2&gt;

</description>
      <category>go</category>
      <category>otp</category>
      <category>echo</category>
      <category>twilo</category>
    </item>
  </channel>
</rss>
