<?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: Thanawat Wongchai</title>
    <description>The latest articles on DEV Community by Thanawat Wongchai (@thanawat_wonchai).</description>
    <link>https://dev.to/thanawat_wonchai</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3821627%2F91172568-3a21-4fd5-9802-0ebae2983f0a.png</url>
      <title>DEV Community: Thanawat Wongchai</title>
      <link>https://dev.to/thanawat_wonchai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thanawat_wonchai"/>
    <language>en</language>
    <item>
      <title>วิธีใช้ Seedance 2.0 API ปี 2026</title>
      <dc:creator>Thanawat Wongchai</dc:creator>
      <pubDate>Sat, 04 Apr 2026 13:09:52 +0000</pubDate>
      <link>https://dev.to/thanawat_wonchai/withiiaich-seedance-20-api-pii-2026-lg</link>
      <guid>https://dev.to/thanawat_wonchai/withiiaich-seedance-20-api-pii-2026-lg</guid>
      <description>&lt;h2&gt;
  
  
  สรุปสั้นๆ
&lt;/h2&gt;

&lt;p&gt;API ของ Seedance 2.0 เปิดตัวเมื่อวันที่ 2 เมษายน 2026 ผ่าน Volcengine Ark คุณสามารถส่งงานสร้างวิดีโอด้วยคำขอ POST จากนั้นตรวจสอบสถานะ (poll) จากปลายทาง GET จนกว่าสถานะจะถึง "succeeded" API รองรับ Text-to-video, Image-to-video, การควบคุมเฟรมเริ่มต้นและเฟรมสุดท้าย, การอ้างอิงแบบหลากหลายสื่อ (multimodal references) และการสร้างเสียงแบบ native วิดีโอ 1080p ความยาว 5 วินาทีมีค่าใช้จ่ายประมาณ $0.93 ดาวน์โหลดวิดีโอภายใน 24 ชั่วโมง URL จะหมดอายุหลังจากนั้น&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;ลองใช้ Apidog วันนี้&lt;/a&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://hypereal.cloud" rel="noopener noreferrer"&gt;Hypereal AI&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://hypereal.cloud/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9no1b7kwev33vq2bcepw.png" alt="Seedance 2.0 ตัวอย่าง"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hypereal.cloud/" rel="noopener noreferrer"&gt;ลองใช้ Hypereal AI&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  บทนำ
&lt;/h2&gt;

&lt;p&gt;เมื่อวันที่ 2 เมษายน 2026 แพลตฟอร์ม Volcengine Ark ของ ByteDance ได้เปิดตัว API อย่างเป็นทางการของ Seedance 2.0 ก่อนหน้านั้น วิธีเดียวในการสร้างวิดีโอ Seedance 2.0 คือผ่านเว็บคอนโซล หากคุณเคยเห็นบทเรียนที่แสดงการใช้งาน UI วิดีโอเหล่านั้นเขียนขึ้นสำหรับคอนโซลนี้ แต่คู่มือนี้จะครอบคลุม API จริงที่นักพัฒนาสามารถเรียกใช้ด้วยโปรแกรมได้&lt;/p&gt;

&lt;p&gt;💡API ใช้รูปแบบงานแบบ asynchronous: POST เพื่อสร้างงาน, รับ ID ของงาน, จากนั้น poll ปลายทาง GET จนกว่างานจะเสร็จสิ้น รูปแบบนี้คุ้มค่าที่จะทดสอบแบบ end-to-end ก่อนที่คุณจะนำไปใช้งานจริง Test Scenarios ของ Apidog ช่วยให้คุณสามารถเชื่อมโยงการส่ง POST, ดึง ID ของงาน, วนซ้ำการ poll ด้วย GET และยืนยันว่าการตอบกลับสุดท้ายมี URL วิดีโอที่ถูกต้อง ดาวน์โหลด Apidog ฟรีเพื่อทำตามขั้นตอนการทดสอบในส่วน Apidog ด้านล่าง&lt;/p&gt;

&lt;p&gt;บทความนี้ครอบคลุมประเภทอินพุตที่รองรับทั้งหมด, การคำนวณราคาจากจำนวนโทเค็นในการตอบกลับ และข้อผิดพลาดที่คุณอาจพบในการใช้งานจริง&lt;/p&gt;

&lt;h2&gt;
  
  
  Seedance 2.0 คืออะไร?
&lt;/h2&gt;

&lt;p&gt;Seedance 2.0 คือโมเดลการสร้างวิดีโอจาก ByteDance บน Volcengine Ark ภายใต้ ID โมเดล &lt;code&gt;doubao-seedance-2-0-260128&lt;/code&gt; (มาตรฐาน) และ &lt;code&gt;doubao-seedance-2-0-fast-260128&lt;/code&gt; (เร็วกว่า คุณภาพต่ำกว่า)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ฟีเจอร์หลักเมื่อเทียบกับเวอร์ชัน 1.5:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;รองรับ Text-to-video และ Image-to-video&lt;/li&gt;
&lt;li&gt;กำหนดเฟรมแรกและเฟรมสุดท้าย (ใส่ภาพเริ่ม-จบ)&lt;/li&gt;
&lt;li&gt;อินพุตอ้างอิงแบบหลากหลายสื่อ: รูป, วิดีโอ, เสียง&lt;/li&gt;
&lt;li&gt;สร้างเสียง native (พูด, SFX, เพลง, ฯลฯ)&lt;/li&gt;
&lt;li&gt;ซิงค์ปากมากกว่า 8 ภาษา&lt;/li&gt;
&lt;li&gt;ควบคุมกล้องด้วย text prompt (dolly, tracking ฯลฯ)&lt;/li&gt;
&lt;li&gt;เอาต์พุตสูงสุด 15 วินาที ถึง 2K&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;วิดีโอจะออกที่ 24 fps อัตราส่วน 1:1 ถึง 21:9 เลือกความละเอียดได้ขณะส่งคำขอ&lt;/p&gt;

&lt;h2&gt;
  
  
  มีอะไรเปลี่ยนแปลง: คู่มือเทียบกับ API อย่างเป็นทางการ
&lt;/h2&gt;

&lt;p&gt;ก่อนหน้านี้ Seedance 2.0 ใช้งานได้เฉพาะผ่าน web console (ดู &lt;a href="http://apidog.com/blog/how-to-use-seedance-2-0/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;คู่มือเดือน ก.พ. 2026&lt;/a&gt;) ตอนนี้ API เปิดให้นักพัฒนารวม Seedance เข้ากับโปรแกรมหรือ workflow ของตัวเองได้โดยตรง&lt;/p&gt;

&lt;h2&gt;
  
  
  สิ่งที่ต้องมีก่อนใช้งาน
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;สมัครบัญชี Volcengine ที่ &lt;a href="https://www.volcengine.com/" rel="noopener noreferrer"&gt;volcengine.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;เข้าคอนโซล Ark:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   https://console.volcengine.com/ark/region:ark+cn-beijing/apikey
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;สร้าง API Key แล้ว export เป็น env:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ARK_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-api-key-here"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;ทุก API request ใส่ header:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;   Authorization: Bearer YOUR_ARK_API_KEY
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;บัญชีใหม่ได้เครดิตทดลองใช้ฟรี (สร้างวิดีโอ 15 วินาทีที่ 1080p ได้ประมาณ 8 ครั้ง)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Text-to-video: คำขอแรกของคุณ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Base URL:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://ark.cn-beijing.volces.com/api/v3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;POST ไปยัง &lt;code&gt;/v1/contents/generations/tasks&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ตัวอย่าง cURL
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$ARK_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "doubao-seedance-2-0-260128",
    "content": [
      {
        "type": "text",
        "text": "A golden retriever running through a sunlit wheat field, wide tracking shot, cinematic"
      }
    ],
    "resolution": "1080p",
    "ratio": "16:9",
    "duration": 5,
    "watermark": false
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Response:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cgt-2025xxxxxxxx-xxxx"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ตัวอย่าง Python (SDK อย่างเป็นทางการ)
&lt;/h3&gt;

&lt;p&gt;ติดตั้ง SDK:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;volcenginesdkarkruntime
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ส่งงาน:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;volcenginesdkarkruntime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Ark&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Ark&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ARK_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content_generation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doubao-seedance-2-0-260128&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A golden retriever running through a sunlit wheat field, wide tracking shot, cinematic&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;resolution&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1080p&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;16:9&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;watermark&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เก็บ task ID ไว้สำหรับ polling สถานะ&lt;/p&gt;

&lt;h2&gt;
  
  
  รูปแบบงานแบบ Asynchronous: ส่ง, ตรวจสอบสถานะ, ดาวน์โหลด
&lt;/h2&gt;

&lt;p&gt;งานสร้างวิดีโอจะมีสถานะดังนี้:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;queued -&amp;gt; running -&amp;gt; succeeded
                -&amp;gt; failed
                -&amp;gt; expired
                -&amp;gt; cancelled
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;คุณต้อง poll GET จนกว่าสถานะจะเป็น &lt;code&gt;succeeded&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ตัวอย่างลูปตรวจสอบสถานะ Python
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;volcenginesdkarkruntime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Ark&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Ark&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ARK_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# Step 1: submit
&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content_generation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doubao-seedance-2-0-260128&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Aerial shot of a mountain lake at sunrise, slow dolly forward&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;resolution&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1080p&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;16:9&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;watermark&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;task_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Task submitted: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Step 2: poll with exponential backoff
&lt;/span&gt;&lt;span class="n"&gt;wait&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content_generation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Status: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;succeeded&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;video_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;video_url&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Video URL: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;video_url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;break&lt;/span&gt;
    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;expired&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cancelled&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Task ended with status: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;break&lt;/span&gt;

    &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wait&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;wait&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wait&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Step 3: download immediately
&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;succeeded&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;video_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;output.mp4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;wb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;iter_content&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chunk_size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8192&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Downloaded: output.mp4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;หมายเหตุ:&lt;/strong&gt; ใช้ exponential backoff เพื่อลดการ poll ถี่เกินไป&lt;/p&gt;

&lt;h2&gt;
  
  
  Image-to-video (I2V): การสร้างแอนิเมชันจากภาพนิ่ง
&lt;/h2&gt;

&lt;p&gt;เพิ่ม object &lt;code&gt;"image_url"&lt;/code&gt; ใน &lt;code&gt;content&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content_generation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doubao-seedance-2-0-260128&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The woman slowly turns her head and smiles at the camera&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/portrait.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;adaptive&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;watermark&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ratio: "adaptive"&lt;/code&gt; จะใช้อัตราส่วนภาพของภาพต้นฉบับ&lt;/li&gt;
&lt;li&gt;ภาพสูงสุด 30MB, 9 ภาพต่อคำขอ&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  เฟรมแรกและเฟรมสุดท้าย: ควบคุมจุดเริ่มต้นและจุดสิ้นสุด
&lt;/h2&gt;

&lt;p&gt;ระบุภาพเฟรมแรกและเฟรมสุดท้ายใน &lt;code&gt;content&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content_generation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doubao-seedance-2-0-260128&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The flower blooms from bud to full open, macro lens, soft light&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/flower-bud.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/flower-open.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;adaptive&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;watermark&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;ภาพลำดับ: เฟรมแรก, เฟรมสุดท้าย&lt;/li&gt;
&lt;li&gt;ใช้ &lt;code&gt;return_last_frame: true&lt;/code&gt; เพื่อขอภาพเฟรมสุดท้าย ส่งภาพนี้ไปยังคลิปถัดไปเพื่อเชื่อมวิดีโอหลายคลิป&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  การอ้างอิงแบบหลากหลายสื่อ: รวมรูป, วิดีโอ, เสียง
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;content&lt;/code&gt; อนุญาต:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;{"type": "text", "text": "..."}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;{"type": "image_url", "image_url": {"url": "..."}}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;{"type": "video_url", "video_url": {"url": "..."}}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;{"type": "audio_url", "audio_url": {"url": "..."}}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ข้อจำกัด:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;รูป: สูงสุด 9 ภาพ (30MB/ภาพ)&lt;/li&gt;
&lt;li&gt;วิดีโอ: สูงสุด 3 คลิป (2-15 วินาที, 50MB/คลิป)&lt;/li&gt;
&lt;li&gt;เสียง: 3 ไฟล์ (MP3, 15MB/ไฟล์)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;ตัวอย่าง:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content_generation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doubao-seedance-2-0-260128&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Match the visual style of the reference clip and add the provided background audio&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/style-reference.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;video_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;video_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/motion-reference.mp4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;audio_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;audio_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/background-music.mp3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;16:9&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;watermark&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;ถ้ามีวิดีโอ reference อัตราค่าบริการจะลดลง (ดูหัวข้อราคา)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  การสร้างเสียงแบบ Native
&lt;/h2&gt;

&lt;p&gt;ตั้งค่า &lt;code&gt;generate_audio: true&lt;/code&gt; เพื่อให้ Seedance สร้างเสียงพร้อมวิดีโอ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content_generation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doubao-seedance-2-0-260128&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A street musician plays guitar outside a cafe in Paris, crowds passing by, city sounds&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;resolution&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1080p&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;16:9&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;generate_audio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;watermark&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;รองรับพูด, SFX, เสียงบรรยากาศ, เพลง&lt;/li&gt;
&lt;li&gt;ซิงค์ปากหลายภาษา&lt;/li&gt;
&lt;li&gt;เพิ่มการใช้โทเค็นเล็กน้อย&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  การควบคุมความละเอียด, อัตราส่วนภาพ, ระยะเวลา
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;resolution&lt;/code&gt;: &lt;code&gt;"480p"&lt;/code&gt;, &lt;code&gt;"720p"&lt;/code&gt;, &lt;code&gt;"1080p"&lt;/code&gt;, &lt;code&gt;"2K"&lt;/code&gt; (default &lt;code&gt;"1080p"&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ratio&lt;/code&gt;: &lt;code&gt;"16:9"&lt;/code&gt;, &lt;code&gt;"9:16"&lt;/code&gt;, &lt;code&gt;"4:3"&lt;/code&gt;, &lt;code&gt;"3:4"&lt;/code&gt;, &lt;code&gt;"21:9"&lt;/code&gt;, &lt;code&gt;"1:1"&lt;/code&gt;, &lt;code&gt;"adaptive"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;duration&lt;/code&gt;: 4-15 วินาที (default 5)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;หมายเหตุ:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
โมเดลแบบเร็ว (&lt;code&gt;doubao-seedance-2-0-fast-260128&lt;/code&gt;) สร้างไวกว่าแต่คุณภาพต่ำกว่า ใช้สำหรับ prototyping&lt;/p&gt;
&lt;h2&gt;
  
  
  การอ่านค่าใช้จ่ายจาก Response
&lt;/h2&gt;

&lt;p&gt;หลังงานสำเร็จ field &lt;code&gt;usage&lt;/code&gt; จะบอกจำนวนโทเค็น:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"usage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"completion_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;246840&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"total_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;246840&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;ตัวอย่างอัตรา:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1080p 15 วินาที ~308,880 โทเค็น&lt;/li&gt;
&lt;li&gt;1080p 5 วินาที ~102,960 โทเค็น&lt;/li&gt;
&lt;li&gt;ราคาประมาณ $6.40 ต่อล้านโทเค็น (T2V/I2V), $3.90 ต่อล้านโทเค็น (V2V)&lt;/li&gt;
&lt;li&gt;ตรวจสอบ field นี้ทุก response เพื่อ track ค่าใช้จ่าย&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  สำคัญ: ดาวน์โหลดวิดีโอภายใน 24 ชั่วโมง
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;video_url&lt;/code&gt; จะหมดอายุใน 24 ชั่วโมงหลังจากงานสำเร็จ&lt;/li&gt;
&lt;li&gt;ดาวน์โหลดไฟล์ทันทีก่อนหมดอายุ&lt;/li&gt;
&lt;li&gt;ประวัติงานสอบถามได้ 7 วัน แต่ไฟล์หายถ้าเลย 24 ชั่วโมง&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  วิธีทดสอบ Seedance API ด้วย Apidog
&lt;/h2&gt;

&lt;p&gt;ด้วยโครงสร้าง async ของ API จำเป็นต้องทดสอบแบบหลายขั้นตอน&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr7qpzpmtge0bkzzppks6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr7qpzpmtge0bkzzppks6.png" alt="Test Scenario ใน Apidog"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ขั้นตอนการตั้งค่า Test Scenario
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;สร้าง Test Scenario:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;ไปที่โมดูล Tests ของ Apidog&lt;/li&gt;
&lt;li&gt;ตั้งค่า env ตัวแปร &lt;code&gt;ARK_API_KEY&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;เพิ่มคำขอ submit:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;POST ไปยัง &lt;code&gt;https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Header: &lt;code&gt;Authorization: Bearer {{ARK_API_KEY}}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Extract ตัวแปร &lt;code&gt;$.id&lt;/code&gt; ลง env &lt;code&gt;TASK_ID&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;เพิ่ม Wait:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Wait 30 วินาทีหลัง submit&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;เพิ่ม GET poll ใน For loop:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;GET ไปยัง &lt;code&gt;/tasks/{{TASK_ID}}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Wait 10 วินาทีในแต่ละรอบ&lt;/li&gt;
&lt;li&gt;Break if &lt;code&gt;$.status == "succeeded"&lt;/code&gt; หรือ &lt;code&gt;"failed"&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;เพิ่ม Assertion:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;ตรวจสอบ &lt;code&gt;$.status == "succeeded"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;ตรวจสอบว่า &lt;code&gt;$.content.video_url&lt;/code&gt; มีค่า&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;สามารถนำเข้า cURL โดยตรงเข้าสู่ Apidog เพื่อสร้าง scenario เร็วขึ้น&lt;/p&gt;

&lt;h2&gt;
  
  
  รายละเอียดราคา: วิดีโอ 10 วินาทีมีค่าใช้จ่ายเท่าไหร่
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ประเภทงาน&lt;/th&gt;
&lt;th&gt;อัตรา (ต่อ 1 ล้านโทเค็น)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;T2V / I2V ที่ 1080p&lt;/td&gt;
&lt;td&gt;46 หยวน (~$6.40)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;V2V (reference video)&lt;/td&gt;
&lt;td&gt;28 หยวน (~$3.90)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ระยะเวลา&lt;/th&gt;
&lt;th&gt;โทเค็นโดยประมาณ&lt;/th&gt;
&lt;th&gt;ค่าใช้จ่าย (T2V/I2V)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;5 วินาที&lt;/td&gt;
&lt;td&gt;~103,000&lt;/td&gt;
&lt;td&gt;~$0.93&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10 วินาที&lt;/td&gt;
&lt;td&gt;~206,000&lt;/td&gt;
&lt;td&gt;~$1.32&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15 วินาที&lt;/td&gt;
&lt;td&gt;~309,000&lt;/td&gt;
&lt;td&gt;~$1.97&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;บัญชีใหม่ได้เครดิตทดลองใช้ฟรี (1080p 15 วินาที ~8 คลิป)&lt;/li&gt;
&lt;li&gt;ลด resolution ช่วยลดต้นทุน&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ข้อผิดพลาดทั่วไปและการแก้ไข
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;429 Too Many Requests:&lt;/strong&gt; ชน concurrency limit ใช้ exponential backoff (รอ 10s, 20s, ... สูงสุด 60s)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;status: "failed":&lt;/strong&gt; โมเดลสร้างไม่สำเร็จ ตรวจสอบ prompt, รูป หรือพารามิเตอร์&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;status: "expired":&lt;/strong&gt; งานหมดอายุ ส่งใหม่เท่านั้น&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;403 on video_url:&lt;/strong&gt; URL หมดอายุ ดาวน์โหลดไม่ทันใน 24 ชั่วโมง ต้องสร้างใหม่&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seed reproducibility:&lt;/strong&gt; บันทึกค่า &lt;code&gt;seed&lt;/code&gt; ไว้ถ้าต้องการ re-run ให้ได้ผลลัพธ์เดิม&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  บทสรุป
&lt;/h2&gt;

&lt;p&gt;Seedance 2.0 API เปิดโอกาสให้คุณสร้างวิดีโอแบบ asynchronous ได้แบบโปรแกรม รองรับอินพุตหลากหลาย, สร้างเสียง native, ควบคุมเฟรมแรก/สุดท้าย และทดสอบ workflow ได้ครบถ้วนด้วย Apidog&lt;/p&gt;

&lt;p&gt;ตั้งค่า Test Scenario ใน Apidog เพื่อป้องกันปัญหาจากการ poll, การดึงข้อมูล หรือ URL หมดอายุ ก่อนใช้งานจริง&lt;/p&gt;

&lt;h2&gt;
  
  
  คำถามที่พบบ่อย
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: ความแตกต่าง doubao-seedance-2-0-260128 กับ doubao-seedance-2-0-fast-260128?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: เวอร์ชันมาตรฐานเน้นคุณภาพสูง ใช้สำหรับ production. เวอร์ชัน fast เร็วกว่า เหมาะกับ prototyping&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: ใช้ Seedance 2.0 นอกประเทศจีนได้ไหม?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: ได้ API host ที่ปักกิ่ง อาจหน่วงขึ้น ตรวจสอบข้อจำกัดบัญชี Volcengine&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: เชื่อมหลายคลิปให้เป็นวิดีโอยาวได้อย่างไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: ใช้ &lt;code&gt;return_last_frame: true&lt;/code&gt; เพื่อดึงเฟรมสุดท้ายมาเป็นเฟรมแรกของคลิปถัดไป แล้วนำคลิปมาต่อด้วย video editor&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Native audio มีค่าใช้จ่ายเพิ่มไหม?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: ใช้โทเค็นเพิ่มขึ้นเล็กน้อยเพราะสร้างเสียงพร้อมวิดีโอ&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: ตั้ง webhook แทน polling ได้ไหม?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: ได้ ส่ง &lt;code&gt;callback_url&lt;/code&gt; ใน submit API จะ POST ผลลัพธ์ไปที่ URL นั้นเมื่อเสร็จ&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: ส่งรูปเกิน 9 รูปเป็นอย่างไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: API ตีกลับ error 400 ลดจำนวนรูปใน content array ให้ไม่เกิน 9&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: seed รับประกันผลลัพธ์เดิมหรือไม่?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: ไม่ 100% แต่ถ้าพารามิเตอร์เหมือนเดิมและ server model ไม่เปลี่ยน จะใกล้เคียงที่สุด&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: ติดตามค่าใช้จ่ายงานจำนวนมากอย่างไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: อ่าน &lt;code&gt;completion_tokens&lt;/code&gt; จากแต่ละ response คูณอัตราราคาตามประเภทงานแล้วเก็บ log เอง (API ไม่มี dashboard)&lt;/p&gt;

</description>
    </item>
    <item>
      <title>วิธีใช้ Grok Text to Video API ฉบับสมบูรณ์</title>
      <dc:creator>Thanawat Wongchai</dc:creator>
      <pubDate>Fri, 03 Apr 2026 08:51:14 +0000</pubDate>
      <link>https://dev.to/thanawat_wonchai/withiiaich-grok-text-to-video-api-chbabsmbuurn-f89</link>
      <guid>https://dev.to/thanawat_wonchai/withiiaich-grok-text-to-video-api-chbabsmbuurn-f89</guid>
      <description>&lt;h2&gt;
  
  
  สรุปสั้นๆ
&lt;/h2&gt;

&lt;p&gt;Grok text-to-video API สร้างวิดีโอจากข้อความ prompt ด้วยการเรียก &lt;code&gt;POST /v1/videos/generations&lt;/code&gt; จะได้รับ &lt;code&gt;request_id&lt;/code&gt; กลับมาทันที แล้วใช้ &lt;code&gt;GET /v1/videos/{request_id}&lt;/code&gt; ตรวจสอบสถานะจนกว่าจะเป็น &lt;code&gt;"done"&lt;/code&gt; โมเดลคือ &lt;code&gt;grok-imagine-video&lt;/code&gt; เริ่มต้น $0.05/วินาที (480p) xAI Python SDK ช่วยทำ polling อัตโนมัติ&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;ทดลองใช้ Apidog วันนี้&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  บทนำ
&lt;/h2&gt;

&lt;p&gt;xAI สร้างวิดีโอ 1.2 พันล้านรายการในเดือนแรกหลังเปิดตัว Grok text-to-video API (28 มกราคม 2026) โมเดลนี้ติดอันดับหนึ่ง text-to-video ของ Artificial Analysis ในเดือนเดียวกัน โครงสร้างพื้นฐานรองรับปริมาณงานขนาดใหญ่แล้ว&lt;/p&gt;

&lt;p&gt;คู่มือนี้ให้ขั้นตอนตั้งแต่สร้างคำขอแรก, ตรวจสอบผลลัพธ์, ปรับแต่งพารามิเตอร์, เขียน prompt ให้ดีขึ้น, ใช้รูปภาพอ้างอิง, ขยาย/แก้ไขวิดีโอ และเลือก text-to-video ให้เหมาะกับงานของคุณ&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;API ทำงาน async:&lt;/strong&gt; ส่วนหน้า (frontend) ไม่สามารถรอให้วิดีโอพร้อมก่อนแสดงผล คุณต้องใช้ polling flow เสมอ Smart Mock ของ Apidog ช่วยสร้าง mock endpoint ทั้ง generation และ polling เพื่อให้ dev frontend พัฒนา UI ได้แม้ backend ยังไม่เสร็จ ดาวน์โหลด Apidog ฟรีเพื่อทดสอบตามคู่มือนี้&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Grok text-to-video API คืออะไร?
&lt;/h2&gt;

&lt;p&gt;Grok text-to-video API อยู่ที่ &lt;code&gt;https://api.x.ai&lt;/code&gt; ส่งข้อความ prompt แล้วโมเดล &lt;code&gt;grok-imagine-video&lt;/code&gt; จะสร้างคลิปวิดีโอใหม่โดยไม่ต้องมีภาพต้นฉบับ&lt;/p&gt;

&lt;p&gt;API ตัวนี้ทำงานร่วมกับ endpoint สร้างรูปภาพแบบ synchronous (&lt;code&gt;POST /v1/images/generations&lt;/code&gt;, โมเดล &lt;code&gt;grok-imagine-image&lt;/code&gt;, $0.02/ภาพ) และ endpoint ขยาย/แก้ไขวิดีโอ&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;text-to-video:&lt;/strong&gt; ให้แค่ข้อความ prompt โมเดลสร้างฉาก, motion, สไตล์เอง&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;image-to-video:&lt;/strong&gt; ให้รูปต้นฉบับ โมเดลทำให้ภาพนั้นเคลื่อนไหว&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ดู &lt;a href="http://apidog.com/blog/grok-image-to-video-api/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;คู่มือ Grok image-to-video API&lt;/a&gt; ถ้าคุณต้องการให้ภาพนิ่งเคลื่อนไหว&lt;/p&gt;

&lt;h2&gt;
  
  
  การสร้างวิดีโอจากข้อความ (async flow)
&lt;/h2&gt;

&lt;p&gt;การสร้างวิดีโอใช้เวลาหลายวินาทีถึงนาที API จึงเป็น async:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ส่ง POST พร้อม prompt&lt;/li&gt;
&lt;li&gt;ได้ &lt;code&gt;request_id&lt;/code&gt; ทันที&lt;/li&gt;
&lt;li&gt;วิดีโอถูกสร้างบนเซิร์ฟเวอร์&lt;/li&gt;
&lt;li&gt;Poll ที่ GET endpoint ด้วย &lt;code&gt;request_id&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;ได้ status เปลี่ยนเป็น &lt;code&gt;"done"&lt;/code&gt; จะได้ URL วิดีโอ&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;หมายเหตุ&lt;/strong&gt;: frontend ต้องแสดง loading state ระหว่างรอ&lt;/p&gt;

&lt;h2&gt;
  
  
  ข้อกำหนดเบื้องต้น
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;บัญชี xAI:&lt;/strong&gt; สมัครที่ &lt;a href="https://console.x.ai" rel="noopener noreferrer"&gt;console.x.ai&lt;/a&gt; ต้องกรอกข้อมูล billing ก่อนสร้าง video ได้&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API key:&lt;/strong&gt; สร้างที่ API Keys ในคอนโซล xAI ส่งเป็น Bearer token ทุก request&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ตั้งค่าเป็น env variable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;XAI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your_api_key_here"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(เลือก) ติดตั้ง xAI Python SDK:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;xai-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  คำขอ text-to-video แรกของคุณ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Endpoint:&lt;/strong&gt; &lt;code&gt;POST https://api.x.ai/v1/videos/generations&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;จำเป็น:&lt;/strong&gt; &lt;code&gt;model&lt;/code&gt;, &lt;code&gt;prompt&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  ตัวอย่าง curl
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.x.ai/v1/videos/generations &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$XAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "grok-imagine-video",
    "prompt": "A golden retriever running through autumn leaves in slow motion, cinematic lighting"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;ผลลัพธ์:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"request_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"d97415a1-5796-b7ec-379f-4e6819e08fdf"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ตัวอย่าง Python (requests)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XAI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;BASE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.x.ai&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grok-imagine-video&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A golden retriever running through autumn leaves in slow motion, cinematic lighting&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/v1/videos/generations&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;request_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;request_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Generation started. Request ID: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  การตรวจสอบสถานะเพื่อรับผลลัพธ์วิดีโอ
&lt;/h2&gt;

&lt;p&gt;เมื่อต้องการผลลัพธ์ ให้เรียก &lt;code&gt;GET /v1/videos/{request_id}&lt;/code&gt; เรื่อยๆ จน &lt;code&gt;status&lt;/code&gt; เป็น &lt;code&gt;"done"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;status ที่เป็นไปได้:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;"processing"&lt;/code&gt;: กำลังสร้าง&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;"done"&lt;/code&gt;: เสร็จ มี URL วิดีโอ&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;"failed"&lt;/code&gt;: ล้มเหลว&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Polling Loop (Python)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XAI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;BASE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.x.ai&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;poll_video&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_attempts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/v1/videos/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_attempts&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;progress&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;progress&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Attempt &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;attempt&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: status=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;, progress=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;progress&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;%&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;done&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;
        &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;RuntimeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Video generation failed: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;TimeoutError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Video not ready after &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;max_attempts&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; attempts&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generate_video&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/v1/videos/generations&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grok-imagine-video&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;request_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;request_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Request ID: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;poll_video&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;video_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;video&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Video ready: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;video_url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;video_url&lt;/span&gt;

&lt;span class="n"&gt;video_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;generate_video&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A timelapse of a city skyline at sunset transitioning to night, aerial view&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ตัวอย่างผลลัพธ์เมื่อ status = done:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"done"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"video"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://vidgen.x.ai/....mp4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"respect_moderation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"progress"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"usage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"cost_in_usd_ticks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;500000000&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  การใช้ xAI Python SDK
&lt;/h2&gt;

&lt;p&gt;SDK จะ handle polling ให้อัตโนมัติ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;xai_sdk&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Client&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XAI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grok-imagine-video&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A golden retriever running through autumn leaves in slow motion&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;resolution&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;720p&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;aspect_ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;16:9&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Video URL: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Duration: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;s&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ใช้ SDK สำหรับการพัฒนาเร็ว ถ้าต้องการควบคุม retry หรือ polling interval ใช้ raw HTTP&lt;/p&gt;

&lt;h2&gt;
  
  
  การเขียน prompt ที่มีประสิทธิภาพสำหรับวิดีโอ
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;อธิบายฉากชัดเจน:&lt;/strong&gt; บอกตัวแบบ+ฉากหลัง&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;การเคลื่อนไหว:&lt;/strong&gt; เจาะจงว่ากล้องหรือ object เคลื่อนไหวยังไง&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;สไตล์กล้อง:&lt;/strong&gt; เช่น "close-up", "drone shot"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;แสง/บรรยากาศ:&lt;/strong&gt; "golden hour", "overcast", ฯลฯ&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;อ้างอิงสไตล์:&lt;/strong&gt; "cinematic", "anime", ผสมหลายสไตล์ได้&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;prompt โครงสร้างดี:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  A lone astronaut floats past the International Space Station,
  tether drifting behind them. The camera tracks slowly
  alongside, showing Earth below. Cinematic, IMAX quality,
  warm sunrise light reflecting off the visor.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  การควบคุมความละเอียด, ระยะเวลา, อัตราส่วนภาพ
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;duration:&lt;/strong&gt; 1-15 วินาที (default 6s)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;resolution:&lt;/strong&gt; &lt;code&gt;"480p"&lt;/code&gt; (default), &lt;code&gt;"720p"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;aspect_ratio:&lt;/strong&gt; &lt;code&gt;"16:9"&lt;/code&gt;, &lt;code&gt;"9:16"&lt;/code&gt;, &lt;code&gt;"1:1"&lt;/code&gt;, &lt;code&gt;"4:3"&lt;/code&gt;, &lt;code&gt;"3:4"&lt;/code&gt;, &lt;code&gt;"3:2"&lt;/code&gt;, &lt;code&gt;"2:3"&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;อัตราส่วน&lt;/th&gt;
&lt;th&gt;เหมาะสำหรับ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;16:9&lt;/td&gt;
&lt;td&gt;เดสก์ท็อป, YouTube (default)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9:16&lt;/td&gt;
&lt;td&gt;TikTok, IG Reels, มือถือ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1:1&lt;/td&gt;
&lt;td&gt;IG feed, social cards&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4:3&lt;/td&gt;
&lt;td&gt;วิดีโอคลาสสิก, นำเสนอ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3:4&lt;/td&gt;
&lt;td&gt;มือถือแนวตั้ง&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3:2&lt;/td&gt;
&lt;td&gt;ภาพถ่ายมาตรฐาน&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2:3&lt;/td&gt;
&lt;td&gt;ถ่ายภาพบุคคล&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  ตัวอย่าง curl แบบเต็ม
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.x.ai/v1/videos/generations &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$XAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "grok-imagine-video",
    "prompt": "A coastal town at dawn, waves breaking gently on a rocky shore",
    "duration": 10,
    "resolution": "720p",
    "aspect_ratio": "16:9"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  การใช้รูปภาพอ้างอิงเพื่อกำหนดสไตล์วิดีโอ
&lt;/h2&gt;

&lt;p&gt;ส่ง &lt;code&gt;reference_images&lt;/code&gt; (array URLs สูงสุด 7 ภาพ) เพื่อชี้นำสไตล์และโทนภาพ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"grok-imagine-video"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"prompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"A coastal town at dawn, waves breaking gently on a rocky shore"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reference_images"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/my-style-reference.jpg"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/color-palette-reference.jpg"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;ภาพควรสอดคล้องกันเพื่อผลลัพธ์ดีที่สุด&lt;/li&gt;
&lt;li&gt;ต่างจาก image-to-video: prompt ยังขับเคลื่อนฉากหลัก&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  การขยายและแก้ไขวิดีโอที่สร้างขึ้น
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ขยายวิดีโอ:&lt;/strong&gt;
&lt;code&gt;POST /v1/videos/extensions&lt;/code&gt;
ส่ง &lt;code&gt;request_id&lt;/code&gt; + prompt ใหม่ เพื่อเพิ่มฟุตเทจต่อท้าย (ใช้ทำคลิปยาว &amp;gt;15 วินาที)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;แก้ไขวิดีโอ:&lt;/strong&gt;
&lt;code&gt;POST /v1/videos/edits&lt;/code&gt;
ส่ง &lt;code&gt;request_id&lt;/code&gt; + prompt เพื่อเปลี่ยนสไตล์/ฉาก/เอฟเฟกต์&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ทั้งคู่ใช้ polling แบบเดียวกับ main endpoint&lt;/p&gt;

&lt;h2&gt;
  
  
  การอ่านค่าใช้จ่ายจาก API
&lt;/h2&gt;

&lt;p&gt;ผลลัพธ์ที่สมบูรณ์จะมี &lt;code&gt;usage&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"usage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cost_in_usd_ticks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;500000000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;หารด้วย 10,000,000 เพื่อแปลงเป็นดอลลาร์:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;cost_in_usd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;usage&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cost_in_usd_ticks&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;10_000_000&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cost: $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;cost_in_usd&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# Output: Cost: $0.0500
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ตารางราคา
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ความละเอียด&lt;/th&gt;
&lt;th&gt;ราคาต่อวินาที&lt;/th&gt;
&lt;th&gt;คลิป 10 วินาที&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;480p&lt;/td&gt;
&lt;td&gt;$0.05&lt;/td&gt;
&lt;td&gt;$0.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;720p&lt;/td&gt;
&lt;td&gt;$0.07&lt;/td&gt;
&lt;td&gt;$0.70&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;บันทึก &lt;code&gt;cost_in_usd_ticks&lt;/code&gt; จากทุก polling ที่สำเร็จเพื่อ track ต้นทุน&lt;/p&gt;

&lt;h2&gt;
  
  
  วิธีทดสอบ Grok video API ของคุณด้วย Apidog
&lt;/h2&gt;

&lt;p&gt;async polling flow ทำให้ทดสอบ frontend ยาก เพราะต้อง handle สถานะ loading/success/error โดยไม่เปลืองเครดิตจริง Smart Mock ของ &lt;a href="https://apidog.com/api-mocking/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; ช่วยแก้ปัญหานี้&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmit5bu2s8zqtmpzxfpbs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmit5bu2s8zqtmpzxfpbs.png" alt="Apidog Smart Mock"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  กรณี 1: Smart Mock สำหรับ dev frontend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;จำลอง generation endpoint:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;สร้าง &lt;code&gt;POST /v1/videos/generations&lt;/code&gt; กำหนด response schema มี &lt;code&gt;request_id&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Smart Mock ตอบกลับ UUID ปลอม&lt;/li&gt;
&lt;li&gt;ตัวอย่าง:
&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"request_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"d97415a1-5796-b7ec-379f-4e6819e08fdf"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;จำลอง poll endpoint:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;สร้าง &lt;code&gt;GET /v1/videos/{request_id}&lt;/code&gt; กำหนด response schema เต็ม&lt;/li&gt;
&lt;li&gt;ตั้ง Custom Mock response ส่ง &lt;code&gt;"status": "done"&lt;/code&gt; + URL วิดีโอเทียม
&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"done"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"video"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://vidgen.x.ai/mock-video-12345.mp4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"respect_moderation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"progress"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"usage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"cost_in_usd_ticks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;400000000&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Dev frontend สามารถสร้าง UI player, ทดสอบ loading/success/fail ได้โดยไม่เปลืองเครดิต&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  กรณี 2: Test Scenario สำหรับ polling loop
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Step 1:&lt;/strong&gt; สร้าง &lt;code&gt;POST /v1/videos/generations&lt;/code&gt; ดึง &lt;code&gt;request_id&lt;/code&gt; ด้วย JSONPath &lt;code&gt;$.request_id&lt;/code&gt; เก็บในตัวแปร&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 2:&lt;/strong&gt; สร้าง &lt;code&gt;GET /v1/videos/{{videoRequestId}}&lt;/code&gt; ห่อด้วย for loop (หยุดเมื่อ status=="done") ใส่ wait 5 วินาที&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 3:&lt;/strong&gt; Assertion &lt;code&gt;$.video.url&lt;/code&gt; ต้องไม่ว่าง&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;รันใน CI เพื่อจับ bug polling logic ได้อัตโนมัติ&lt;/p&gt;

&lt;h2&gt;
  
  
  Text-to-video vs image-to-video: เลือกใช้อย่างไร
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;text-to-video:&lt;/strong&gt; สร้างฉากใหม่จาก prompt เหมาะกับเนื้อหาต้นฉบับ/ไม่มีรูปภาพ&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;image-to-video:&lt;/strong&gt; เคลื่อนไหวรูปภาพที่มี เหมาะกับ assets, แบรนด์ หรือภาพวาด&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ดู &lt;a href="https://apidog.com/api-mocking/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;คู่มือ Grok image-to-video API&lt;/a&gt; สำหรับรายละเอียด&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ตรวจจับ input: ถ้ามีภาพ ส่ง image-to-video, ถ้าไม่มี ส่ง text-to-video&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;401 Unauthorized:&lt;/strong&gt; ตรวจสอบ API Key, header, คีย์หมดอายุหรือไม่&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;429 Too Many Requests:&lt;/strong&gt; เกิน rate limit (60/min, 1/sec) เพิ่มดีเลย์ตรวจสอบสถานะอย่างน้อย 5s&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;status: "failed":&lt;/strong&gt; Prompt โดน content moderation, ปรับแก้ prompt ใหม่&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;URL วิดีโอ 404:&lt;/strong&gt; URL หมดอายุ ดาวน์โหลดทันทีหลังได้ URL&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;วิดีโอว่าง/ค้าง:&lt;/strong&gt; Prompt คลุมเครือหรือไม่มี motion, เพิ่มคำอธิบายการเคลื่อนไหว&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;รอตรวจสอบสถานะนาน:&lt;/strong&gt; 720p/คลิปยาวใช้เวลาสร้างนาน ใช้ 480p + สั้นๆ สำหรับ prototype&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  บทสรุป
&lt;/h2&gt;

&lt;p&gt;Grok text-to-video API ใช้งานตรงไปตรงมา: ส่ง prompt, ได้ &lt;code&gt;request_id&lt;/code&gt;, poll จน &lt;code&gt;"done"&lt;/code&gt;, โหลด MP4&lt;br&gt;&lt;br&gt;
เน้นเข้าใจ async flow (polling) ก่อน ส่วนพารามิเตอร์อื่นๆ เช่น ระยะเวลา, ความละเอียด, อัตราส่วน, รูปภาพอ้างอิง สามารถปรับแต่งได้ง่าย&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ติดตามค่าใช้จ่ายด้วย &lt;code&gt;cost_in_usd_ticks&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;จำลอง endpoint ทั้งสองใน Apidog เพื่อให้ dev frontend ทำงานได้เร็ว&lt;/li&gt;
&lt;li&gt;ใช้ Test Scenarios ตรวจสอบ polling logic ได้อัตโนมัติ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ดาวน์โหลด Apidog ฟรีเพื่อตั้งค่า mock server และ test scenarios สำหรับ Grok video API ของคุณ&lt;/p&gt;

&lt;h2&gt;
  
  
  คำถามที่พบบ่อย
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: ใช้ชื่อโมเดลอะไรสร้างวิดีโอจากข้อความ?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: ใช้ &lt;code&gt;"grok-imagine-video"&lt;/code&gt; ใส่ในฟิลด์ &lt;code&gt;model&lt;/code&gt; ขณะ POST &lt;code&gt;/v1/videos/generations&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: สร้างวิดีโอนานแค่ไหน?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: แล้วแต่ duration/resolution 480p สั้นๆ ประมาณ 30 วินาที, 720p ยาวๆ หลายนาที Poll ทุก 5-10 วินาที&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: สร้างวิดีโอยาวเกิน 15 วินาทีได้ไหม?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: ไม่ได้ในการเรียกเดียว (&lt;code&gt;duration&lt;/code&gt; สูงสุด 15s) ใช้ &lt;code&gt;POST /v1/videos/extensions&lt;/code&gt; ต่อฟุตเทจ&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: ดาวน์โหลดวิดีโอที่สร้างได้อย่างไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: ใช้ URL จาก &lt;code&gt;result.video.url&lt;/code&gt; ใน polling ที่ status = done โหลดทันที URL จะหมดอายุ&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: ถ้า prompt โดน moderation?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: status จะเป็น &lt;code&gt;"failed"&lt;/code&gt; ฟิลด์ &lt;code&gt;respect_moderation&lt;/code&gt; = true ให้แก้ prompt แล้วลองใหม่&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: มีบริการฟรีสำหรับ video API ไหม?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: ไม่มีฟรี xAI คิดค่าบริการตามวินาที ดูข้อเสนอเครดิตใน &lt;a href="https://console.x.ai" rel="noopener noreferrer"&gt;console.x.ai&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: &lt;code&gt;reference_images&lt;/code&gt; ต่างจาก image-to-video ยังไง?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: &lt;code&gt;reference_images&lt;/code&gt; ช่วยชี้นำสไตล์เท่านั้น ไม่กลายเป็นตัวแบบ ส่วน image-to-video รูปภาพต้นฉบับคือเฟรมแรกจริง&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: ทดสอบ polling loop โดยไม่เสียเครดิตยังไง?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: ใช้ Smart Mock ของ &lt;a href="https://apidog.com/api-mocking/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; จำลองทั้ง generation/poll endpoint ได้ครบทุกสถานะ&lt;/p&gt;

</description>
    </item>
    <item>
      <title>วิธีใช้ Grok Image to Video API แบบละเอียด (พร้อมคู่มือทีละขั้นตอน)</title>
      <dc:creator>Thanawat Wongchai</dc:creator>
      <pubDate>Fri, 03 Apr 2026 08:45:52 +0000</pubDate>
      <link>https://dev.to/thanawat_wonchai/withiiaich-grok-image-to-video-api-aebblaeiiyd-phrmkhuumuuethiilakhantn-43oj</link>
      <guid>https://dev.to/thanawat_wonchai/withiiaich-grok-image-to-video-api-aebblaeiiyd-phrmkhuumuuethiilakhantn-43oj</guid>
      <description>&lt;h2&gt;
  
  
  สรุปสาระสำคัญ
&lt;/h2&gt;

&lt;p&gt;Grok image-to-video API ใช้โมเดล &lt;code&gt;grok-imagine-video&lt;/code&gt; เพื่อเปลี่ยนภาพนิ่งให้เป็นคลิปวิดีโอที่มีการเคลื่อนไหว คุณส่ง URL รูปภาพ พรอมต์ และการตั้งค่าเพิ่มเติมไปยัง &lt;code&gt;https://api.x.ai/v1/videos/generations&lt;/code&gt; ด้วยเมธอด POST API จะส่ง &lt;code&gt;request_id&lt;/code&gt; กลับมาทันที จากนั้นคุณจะทำการเรียก &lt;code&gt;GET /v1/videos/{request_id}&lt;/code&gt; ซ้ำๆ จนกว่า &lt;code&gt;status&lt;/code&gt; จะเป็น &lt;code&gt;"done"&lt;/code&gt; ความยาวของวิดีโออยู่ระหว่าง 1 ถึง 15 วินาที ราคาเริ่มต้นที่ $0.05 ต่อวินาทีสำหรับวิดีโอความละเอียด 480p&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;ทดลองใช้ Apidog วันนี้&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  บทนำ
&lt;/h2&gt;

&lt;p&gt;เมื่อวันที่ 28 มกราคม 2026 xAI ได้เปิดตัวโมเดล &lt;code&gt;grok-imagine-video&lt;/code&gt; ให้เข้าถึงผ่าน API สาธารณะ ภายในเดือนแรก โมเดลนี้สร้างวิดีโอได้ถึง 1.2 พันล้านรายการ และติดอันดับหนึ่งบนกระดานผู้นำ text-to-video ของ Artificial Analysis Image-to-video เป็นหนึ่งในคุณสมบัติเด่น: คุณส่งรูปถ่ายและพรอมต์บรรยายไปยัง API แล้ว API จะเปลี่ยนรูปถ่ายนั้นให้กลายเป็นคลิปวิดีโอสั้นๆ พร้อมให้ดาวน์โหลดในรูปแบบ MP4&lt;/p&gt;

&lt;p&gt;กระบวนการแบบอะซิงโครนัสนี้ ที่คุณส่งงานแล้วรอผลลัพธ์ ทำให้เกิดความท้าทายในการทดสอบที่นักพัฒนาหลายคนมองข้ามไป การรวมระบบของคุณยังไม่เสร็จสิ้นเมื่อ POST แรกส่งคืนค่า 200 แต่จะเสร็จสิ้นเมื่อคุณยืนยันว่าการวนลูปเพื่อตรวจสอบสถานะสามารถจัดการสถานะ &lt;code&gt;"processing"&lt;/code&gt;, &lt;code&gt;"done"&lt;/code&gt;, และ &lt;code&gt;"failed"&lt;/code&gt; ได้อย่างถูกต้องภายใต้สภาพเครือข่ายจริง&lt;/p&gt;

&lt;p&gt;Test Scenarios ของ &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; แก้ปัญหานี้ได้โดยตรง คุณสามารถสร้างลำดับการทำงานแบบต่อเนื่องได้: ส่งคำขอ POST ไปยัง &lt;code&gt;/v1/videos/generations&lt;/code&gt;, ดึงค่า &lt;code&gt;request_id&lt;/code&gt; ออกมา, วนลูปเพื่อตรวจสอบสถานะจนกว่า &lt;code&gt;status == "done"&lt;/code&gt;, จากนั้นยืนยันว่ามี URL ของวิดีโออยู่ ดาวน์โหลด Apidog ฟรี เพื่อทำตามขั้นตอนการทดสอบในส่วนถัดไปของคู่มือนี้&lt;/p&gt;

&lt;h2&gt;
  
  
  Grok image to video API คืออะไร?
&lt;/h2&gt;

&lt;p&gt;Grok image-to-video API เป็นส่วนหนึ่งของผลิตภัณฑ์สร้างวิดีโอของ xAI API นี้ทำงานภายใต้โมเดล &lt;code&gt;grok-imagine-video&lt;/code&gt; และรับรูปภาพเป็นเฟรมเริ่มต้นของวิดีโอที่สร้างขึ้น โมเดลจะวิเคราะห์เนื้อหาของรูปภาพและพรอมต์ข้อความ จากนั้นสร้างการเคลื่อนไหวที่เป็นธรรมชาติเพื่อทำให้ฉากนั้นมีชีวิตชีวา&lt;/p&gt;

&lt;p&gt;API endpoint คือ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST https://api.x.ai/v1/videos/generations
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;การยืนยันตัวตนใช้ Bearer token มาตรฐาน:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;Authorization: Bearer YOUR_XAI_API_KEY
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;คุณสามารถรับคีย์ได้จาก &lt;a href="https://console.x.ai" rel="noopener noreferrer"&gt;xAI console&lt;/a&gt; API เดียวกันนี้ยังรองรับ text-to-video (โดยละเว้นพารามิเตอร์ &lt;code&gt;image&lt;/code&gt;), การต่อเติมวิดีโอ, และการแก้ไขวิดีโออีกด้วย&lt;/p&gt;

&lt;h2&gt;
  
  
  กระบวนการทำงานของ image-to-video
&lt;/h2&gt;

&lt;p&gt;พารามิเตอร์ &lt;code&gt;image&lt;/code&gt; ใน request body กำหนด &lt;strong&gt;เฟรมแรก&lt;/strong&gt; ของวิดีโอที่สร้างขึ้น โมเดลไม่ได้แทนที่รูปภาพ แต่เริ่มต้นจากรูปภาพนั้น ทุกพิกเซลในเฟรมแรกมาจากรูปภาพต้นฉบับของคุณ จากนั้นโมเดลจะทำนายว่าฉากนั้นจะเคลื่อนไหวไปข้างหน้าตามเวลาอย่างไร โดยอ้างอิงจากพรอมต์ของคุณ&lt;/p&gt;

&lt;p&gt;ตัวอย่างเช่น คุณให้ภาพถ่ายทะเลสาบภูเขาตอนพระอาทิตย์ขึ้น พรอมต์ของคุณระบุว่า "ระลอกคลื่นเบาๆ แผ่กระจายไปทั่วผิวน้ำพร้อมกับหมอกยามเช้าที่ลอยละล่อง" เฟรมแรกของวิดีโอที่สร้างขึ้นจะเป็นรูปถ่ายของคุณ เฟรมถัดไปจะแสดงการเคลื่อนไหวของน้ำและหมอกตามพรอมต์&lt;/p&gt;

&lt;p&gt;ซึ่งแตกต่างจาก text-to-video ที่โมเดลจะสร้างเฟรมแรกขึ้นมาเองทั้งหมด Image-to-video ช่วยให้คุณควบคุมฉากเริ่มต้นได้อย่างแม่นยำ&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;เมื่อไรควรเลือก image-to-video:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;มีรูปภาพผลิตภัณฑ์ ทิวทัศน์ หรือภาพบุคคลอยู่แล้วที่ต้องการทำให้เคลื่อนไหว&lt;/li&gt;
&lt;li&gt;สินทรัพย์ของแบรนด์คุณต้องการอัตลักษณ์ทางภาพที่สอดคล้องกันในเฟรมแรก&lt;/li&gt;
&lt;li&gt;ต้องการให้การเคลื่อนไหวรู้สึกเหมือนมาจากฉากจริงหรือฉากที่เฉพาะเจาะจง&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;ควรเลือก text-to-video เมื่อ:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;กำลังสำรวจแนวคิดภาพโดยไม่มีภาพอ้างอิง&lt;/li&gt;
&lt;li&gt;ต้องการให้โมเดลเป็นผู้กำหนดองค์ประกอบของฉากทั้งหมด&lt;/li&gt;
&lt;li&gt;ความเร็วในการทำซ้ำมีความสำคัญมากกว่าความแม่นยำของเฟรมแรก&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ข้อกำหนดเบื้องต้น
&lt;/h2&gt;

&lt;p&gt;ก่อนเรียก API ครั้งแรก เตรียมสิ่งต่อไปนี้:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;บัญชี xAI&lt;/strong&gt; ที่ &lt;a href="https://console.x.ai" rel="noopener noreferrer"&gt;console.x.ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API key&lt;/strong&gt; จาก xAI console. แนะนำให้เก็บไว้ในตัวแปรสภาพแวดล้อม&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python 3.8+&lt;/strong&gt; หรือ &lt;strong&gt;Node.js 18+&lt;/strong&gt; (ตัวอย่างนี้มีทั้งสองภาษา)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;URL ของรูปภาพที่เข้าถึงได้จากสาธารณะ&lt;/strong&gt; หรือรูปภาพที่เข้ารหัส base64 เป็น data URI&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozcnsdoclf1obpc6q6w3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozcnsdoclf1obpc6q6w3.png" alt="image-68.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ตั้งค่าคีย์ของคุณเป็น environment variable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;XAI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your_key_here"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ติดตั้ง xAI Python SDK (หากต้องการใช้งานไคลเอนต์ระดับสูง):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;xai-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;สำหรับ HTTP request ตรง ใช้แค่ &lt;code&gt;requests&lt;/code&gt; (Python) หรือ &lt;code&gt;fetch&lt;/code&gt; (Node.js)&lt;/p&gt;

&lt;h2&gt;
  
  
  การสร้างคำขอ image-to-video ครั้งแรก
&lt;/h2&gt;

&lt;h3&gt;
  
  
  การใช้งาน curl
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.x.ai/v1/videos/generations &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$XAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "grok-imagine-video",
    "prompt": "Gentle waves move across the surface, morning mist rises slowly",
    "image": {
      "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/24701-nature-natural-beauty.jpg/1280px-24701-nature-natural-beauty.jpg"
    },
    "duration": 6,
    "resolution": "720p",
    "aspect_ratio": "16:9"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;การตอบกลับจะมาทันทีพร้อมกับ &lt;code&gt;request_id&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"request_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"d97415a1-5796-b7ec-379f-4e6819e08fdf"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;วิดีโอจะยังไม่พร้อมใช้งาน ต้องตรวจสอบสถานะด้วย Polling&lt;/p&gt;

&lt;h3&gt;
  
  
  การใช้งาน Python (request ตรง)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XAI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grok-imagine-video&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Gentle waves move across the surface, morning mist rises slowly&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/24701-nature-natural-beauty.jpg/1280px-24701-nature-natural-beauty.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;duration&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;resolution&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;720p&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;aspect_ratio&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;16:9&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.x.ai/v1/videos/generations&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;request_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;request_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Job started: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  การใช้งานรูปภาพ Base64
&lt;/h3&gt;

&lt;p&gt;หากใช้ไฟล์ local หรือไม่เผยแพร่ URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my_image.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;encoded&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;b64encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data:image/jpeg;base64,&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;encoded&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  การตรวจสอบผลลัพธ์ (Polling)
&lt;/h2&gt;

&lt;p&gt;API จะส่ง &lt;code&gt;request_id&lt;/code&gt; กลับมา ให้คุณตรวจสอบสถานะที่ endpoint นี้:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET https://api.x.ai/v1/videos/{request_id}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;สถานะหลักที่ต้องสนใจ:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;สถานะ&lt;/th&gt;
&lt;th&gt;ความหมาย&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;"processing"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;วิดีโอกำลังถูกเรนเดอร์&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;"done"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;วิดีโอพร้อมใช้งานแล้ว URL อยู่ในการตอบกลับ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;"failed"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;เกิดข้อผิดพลาด&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;ตัวอย่างการตอบกลับ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"done"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"video"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://vidgen.x.ai/....mp4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"progress"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ตัวอย่างวนลูป Polling ด้วย Python
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;poll_video&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.x.ai/v1/videos/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Status: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; | Progress: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;progress&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;%&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;done&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;video&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;RuntimeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Video generation failed for &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Usage
&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;poll_video&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Video URL: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Duration: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;duration&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;s&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;แนะนำ:&lt;/strong&gt; กำหนด interval อย่างน้อย 5 วินาที เพื่อลดโอกาสโดน rate limit (60 requests ต่อนาที)&lt;/p&gt;

&lt;h2&gt;
  
  
  การใช้งาน xAI Python SDK
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;xai-sdk&lt;/code&gt; จะ handle async loop ให้โดยอัตโนมัติ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;xai_sdk&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Client&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XAI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;video&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grok-imagine-video&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Gentle waves move across the surface, morning mist rises slowly&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/landscape.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;resolution&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;720p&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;aspect_ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;16:9&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Video URL: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Duration: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;s&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ถ้าอยากควบคุม polling interval/retry/log เอง แนะนำใช้ request ตรง&lt;/p&gt;

&lt;h2&gt;
  
  
  การควบคุมความละเอียด, ระยะเวลา และอัตราส่วนภาพ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ระยะเวลา (Duration)
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;duration&lt;/code&gt; รับค่าระหว่าง 1–15 วินาที (ค่า default = 6):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ความละเอียด (Resolution)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ค่า&lt;/th&gt;
&lt;th&gt;คำอธิบาย&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;"480p"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ค่าเริ่มต้น. ราคาต่ำ, เร็ว&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;"720p"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;คุณภาพสูงกว่า. $0.07/วินาที&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"resolution"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"720p"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  อัตราส่วนภาพ (Aspect ratio)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ค่า&lt;/th&gt;
&lt;th&gt;กรณีใช้งาน&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;"16:9"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ค่าเริ่มต้น. จอกว้าง&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;"9:16"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;แนวตั้งสำหรับมือถือ/สตอรี่&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;"1:1"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;สี่เหลี่ยมสำหรับโซเชียล&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;"4:3"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ภาพถ่ายคลาสสิก&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;"3:4"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;บุคคลแนวตั้ง&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;"3:2"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;มาตรฐานการคร็อป&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;"2:3"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;บุคคลแนวตั้งสูง&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;หากระบุ &lt;code&gt;image&lt;/code&gt; ค่า default aspect ratio จะเท่ากับรูปต้นฉบับ&lt;/strong&gt; หากต้องการเปลี่ยน ให้กำหนดเอง&lt;/p&gt;




&lt;h2&gt;
  
  
  การใช้รูปภาพอ้างอิงเพื่อเป็นแนวทางสไตล์
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;image&lt;/code&gt;: รูปต้นฉบับที่เป็นเฟรมแรก&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;reference_images&lt;/code&gt;: อาร์เรย์ (สูงสุด 7 รูป) เป็นแนวทางสไตล์/เนื้อหา ไม่ใช่เฟรม
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"grok-imagine-video"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"prompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"A product rotating slowly on a clean white surface"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"image"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/product-shot.jpg"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reference_images"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/brand-style-reference-1.jpg"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/lighting-reference.jpg"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"resolution"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"720p"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;reference_images&lt;/code&gt; สามารถใช้เดี่ยวๆ (text-to-video) หรือร่วมกับ &lt;code&gt;image&lt;/code&gt; ก็ได้&lt;/p&gt;

&lt;h2&gt;
  
  
  การต่อเติมและแก้ไขวิดีโอ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  การต่อเติมวิดีโอ
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;POST /v1/videos/extensions&lt;/code&gt; สร้างคลิปต่อจากวิดีโอเดิม (สูงสุด 15 วินาทีต่อรอบ):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.x.ai/v1/videos/extensions &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$XAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "grok-imagine-video",
    "video_id": "your_original_request_id",
    "prompt": "The mist continues to lift as sunlight breaks through",
    "duration": 5
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Polling status เหมือนเดิมที่ &lt;code&gt;GET /v1/videos/{request_id}&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  การแก้ไขวิดีโอ
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;POST /v1/videos/edits&lt;/code&gt; แก้ไขวิดีโอเดิมด้วยพรอมต์ใหม่:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.x.ai/v1/videos/edits &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$XAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "grok-imagine-video",
    "video_id": "your_original_request_id",
    "prompt": "Change the sky to a dramatic sunset with deep orange tones"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ทั้งสองแบบ polling รูปแบบเดียวกัน&lt;/p&gt;

&lt;h2&gt;
  
  
  รายละเอียดราคา: วิดีโอ 10 วินาทีมีค่าใช้จ่ายเท่าไร
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ส่วนประกอบ&lt;/th&gt;
&lt;th&gt;ค่าใช้จ่าย&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;รูปภาพอินพุต&lt;/td&gt;
&lt;td&gt;$0.002 ต่อรูป&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;วิดีโอ 480p&lt;/td&gt;
&lt;td&gt;$0.05 ต่อวินาที&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;วิดีโอ 720p&lt;/td&gt;
&lt;td&gt;$0.07 ต่อวินาที&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;ตัวอย่าง 1:&lt;/strong&gt; วิดีโอ 10 วินาที 720p  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;รูปภาพอินพุต: $0.002
&lt;/li&gt;
&lt;li&gt;วิดีโอ: 10 × $0.07 = $0.70
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;รวม: $0.702&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;ตัวอย่าง 2:&lt;/strong&gt; วิดีโอ 6 วินาที 480p  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;รูปภาพอินพุต: $0.002
&lt;/li&gt;
&lt;li&gt;วิดีโอ: 6 × $0.05 = $0.30
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;รวม: $0.302&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;หมายเหตุ:&lt;/strong&gt; Text-to-video (ไม่มี &lt;code&gt;image&lt;/code&gt;) จะไม่มีค่าอินพุต $0.002&lt;/p&gt;

&lt;h2&gt;
  
  
  วิธีทดสอบการเชื่อมต่อ Grok video API ของคุณด้วย Apidog
&lt;/h2&gt;

&lt;p&gt;API แบบ async ต้องทดสอบแบบลำดับหลายขั้นตอน (ไม่ใช่แค่ request ครั้งเดียว):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;POST สร้างวิดีโอ รับ &lt;code&gt;request_id&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;GET ตรวจสอบสถานะ ต้อง handle &lt;code&gt;"processing"&lt;/code&gt; ระหว่างรอ&lt;/li&gt;
&lt;li&gt;GET จน &lt;code&gt;status == "done"&lt;/code&gt; และมี URL จริง&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  ขั้นตอนการสร้าง Test Scenario ใน &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. สร้าง Test Scenario ใหม่&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ใน Apidog ไปที่โมดูล Tests &amp;gt; กด &lt;code&gt;+&lt;/code&gt; สร้าง scenario ใหม่ ตั้งชื่อ “Grok image-to-video async flow”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. เพิ่มคำขอ POST สร้างวิดีโอ&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;URL: &lt;code&gt;https://api.x.ai/v1/videos/generations&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Method: POST&lt;/li&gt;
&lt;li&gt;Header: &lt;code&gt;Authorization: Bearer {{xai_api_key}}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Body:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"grok-imagine-video"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"prompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Gentle mist rises from the water as light filters through the trees"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"image"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/your-test-image.jpg"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"resolution"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"480p"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;3. ดึงค่า request_id&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;หลัง POST เพิ่ม processor &lt;strong&gt;Extract Variable&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Variable name: &lt;code&gt;video_request_id&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Source: Response content&lt;/li&gt;
&lt;li&gt;JSONPath: &lt;code&gt;$.request_id&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Apidog จะเก็บไว้ใน &lt;code&gt;{{video_request_id}}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. สร้าง Polling Loop&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ใช้ processor &lt;strong&gt;For&lt;/strong&gt; loop&lt;br&gt;&lt;br&gt;
ในลูปเพิ่ม GET ตรวจสอบสถานะ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;URL: &lt;code&gt;https://api.x.ai/v1/videos/{{video_request_id}}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Method: GET&lt;/li&gt;
&lt;li&gt;Header: &lt;code&gt;Authorization: Bearer {{xai_api_key}}&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ดึงสถานะ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extract Variable: &lt;code&gt;video_status&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;JSONPath: &lt;code&gt;$.status&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;เพิ่ม processor &lt;strong&gt;Wait&lt;/strong&gt; (5000ms) ในลูป&lt;br&gt;&lt;br&gt;
ตั้ง Break If: &lt;code&gt;{{video_status}} == "done"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. ยืนยัน URL ของวิดีโอ&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;หลังจบลูป เพิ่ม GET สุดท้าย แล้วใช้ processor &lt;strong&gt;Assertion&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Field: &lt;code&gt;$.video.url&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Condition: not empty&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6. รัน Scenario&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;คลิก Run ที่หน้า Test scenario&lt;br&gt;&lt;br&gt;
Apidog จะ POST, ดึง request_id, Poll ซ้ำ, ตรวจสอบสถานะ, และ Assert URL รายงานแสดง status/ระยะเวลาทุกขั้น&lt;/p&gt;

&lt;p&gt;เชื่อมต่อ scenario นี้กับ CI/CD pipeline ได้ด้วย:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog run &lt;span class="nt"&gt;--scenario&lt;/span&gt; grok-video-async-flow &lt;span class="nt"&gt;--env&lt;/span&gt; production
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ข้อผิดพลาดที่พบบ่อยและการแก้ไข
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;401 Unauthorized:&lt;/strong&gt; ตรวจสอบ API key และรูปแบบ Authorization header&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;422 Unprocessable Entity:&lt;/strong&gt; Body ผิด ฟิลด์ขาด/พรอมต์ว่าง/URL รูปภาพเข้าไม่ได้&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;URL รูปภาพเข้าไม่ได้:&lt;/strong&gt; xAI ต้องเข้าถึงได้ ใช้ public CDN หรือ base64 data URI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;สถานะค้างที่ "processing":&lt;/strong&gt; อาจใช้เวลาหลายนาที ถ้าเกิน 10 นาทีให้ส่ง request ใหม่&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate limit error (429):&lt;/strong&gt; จำกัด 60 requests/นาที, 1 request/วินาที เพิ่ม delay ใน polling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Base64 ถูกปฏิเสธ:&lt;/strong&gt; ตรวจ prefix data URI, ใช้ &lt;code&gt;data:image/jpeg;base64,&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;อัตราส่วนภาพไม่ตรง:&lt;/strong&gt; หาก aspect ratio แตกต่างมาก อาจโดนคร็อป หรือเกิด letterbox&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  สรุป
&lt;/h2&gt;

&lt;p&gt;Grok image-to-video API ให้คุณแปลงภาพนิ่งเป็นวิดีโอแอนิเมชันด้วยโมเดล &lt;code&gt;grok-imagine-video&lt;/code&gt; เพียง POST รูปภาพและพรอมต์ รับ &lt;code&gt;request_id&lt;/code&gt; ตรวจสอบสถานะ และดาวน์โหลดไฟล์ MP4 ได้โดยตรง รูปแบบ polling แบบ async คือจุดที่ integration มักเกิดปัญหา การทดสอบด้วย Apidog Test Scenario ครอบคลุมการ Extract Variable, วนลูป polling พร้อมเงื่อนไขหยุด และยืนยันผลลัพธ์ ลดข้อผิดพลาดก่อน production&lt;/p&gt;

&lt;p&gt;เริ่มต้นสร้างการเชื่อมต่อของคุณด้วย &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; ฟรี ไม่ต้องใช้บัตรเครดิต&lt;/p&gt;

&lt;h2&gt;
  
  
  คำถามที่พบบ่อย (FAQ)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: ฉันควรใช้ชื่อโมเดลใดสำหรับ Grok image-to-video API?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: &lt;code&gt;grok-imagine-video&lt;/code&gt; ใส่ในฟิลด์ &lt;code&gt;model&lt;/code&gt; ของ request body&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: พารามิเตอร์ &lt;code&gt;image&lt;/code&gt; กับ &lt;code&gt;reference_images&lt;/code&gt; ต่างกันอย่างไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: &lt;code&gt;image&lt;/code&gt; กำหนดเฟรมแรก, &lt;code&gt;reference_images&lt;/code&gt; ให้แนวทางสไตล์/เนื้อหาโดยไม่ใช่เฟรม&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: การสร้างวิดีโอใช้เวลานานเท่าไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: ขึ้นอยู่กับความละเอียดและระยะเวลา โดยเฉลี่ย 1–3 นาที (6 วินาที 480p), 4–8 นาที (15 วินาที 720p)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: ส่งไฟล์ local เป็นภาพต้นฉบับได้ไหม?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: ได้ ให้ encode เป็น base64 data URI แล้วส่งใน &lt;code&gt;image.url&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: ถ้าไม่ตั้ง &lt;code&gt;aspect_ratio&lt;/code&gt; จะเป็นอย่างไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: ถ้ามี &lt;code&gt;image&lt;/code&gt; ค่า default จะเท่ากับสัดส่วนของรูป, ถ้าไม่มี (&lt;code&gt;text-to-video&lt;/code&gt;) จะเป็น 16:9&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: วิดีโอ 10 วินาที 720p ราคาเท่าไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: รูปภาพอินพุต $0.002 + วิดีโอ $0.70 รวม $0.702&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: API rate limit เท่าไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: 60 requests/นาที และ 1 request/วินาที (รวม POST + GET)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: ต่อเติมวิดีโอให้ยาวเกิน 15 วินาทีได้ไหม?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: ได้ ใช้ endpoint &lt;code&gt;/v1/videos/extensions&lt;/code&gt; ต่อเติมทีละ 15 วินาที Polling แบบเดิม&lt;/p&gt;

</description>
    </item>
    <item>
      <title>ราคา Bird SMS API ปี 2026 เท่าไหร่</title>
      <dc:creator>Thanawat Wongchai</dc:creator>
      <pubDate>Fri, 03 Apr 2026 07:13:50 +0000</pubDate>
      <link>https://dev.to/thanawat_wonchai/raakhaa-bird-sms-api-pii-2026-ethaaaihr-geo</link>
      <guid>https://dev.to/thanawat_wonchai/raakhaa-bird-sms-api-pii-2026-ethaaaihr-geo</guid>
      <description>&lt;h2&gt;
  
  
  สรุปสั้นๆ
&lt;/h2&gt;

&lt;p&gt;API SMS ของ Bird เริ่มต้นที่ &lt;strong&gt;$0.00331 ต่อข้อความที่ส่งออกจากสหรัฐอเมริกา&lt;/strong&gt; และ &lt;strong&gt;$0.003 ต่อข้อความที่ส่งเข้าสหรัฐอเมริกา&lt;/strong&gt; ถือเป็นหนึ่งในราคาเริ่มต้นที่ถูกที่สุดในกลุ่มผู้ให้บริการ SMS API รายใหญ่ คุณยังสามารถใช้แพลนฟรี ส่ง SMS ได้ 5 ข้อความต่อวันเพื่อทดลองก่อนตัดสินใจ ส่วนแพลน Pro $49/เดือน ครอบคลุม SMS 1,000 ข้อความ&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;ทดลองใช้ Apidog วันนี้&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  บทนำ
&lt;/h2&gt;

&lt;p&gt;MessageBird ได้รีแบรนด์เป็น Bird ในปี 2023 โดยเน้น Omnichannel ที่ขับเคลื่อนด้วย AI: SMS, WhatsApp, อีเมล และเสียง อยู่ในแพลตฟอร์มเดียวกัน โครงสร้างราคาถูกเปลี่ยนเป็นแบบจ่ายตามการใช้งานที่โปร่งใส ทำให้ต้นทุน SMS ของ Bird ต่ำกว่า Twilio, Vonage และผู้ให้บริการรายใหญ่อื่นๆ ส่วนใหญ่&lt;/p&gt;

&lt;p&gt;💡&lt;/p&gt;

&lt;p&gt;หากคุณกำลังสร้าง integration กับ SMS คุณต้องการข้อมูลราคาที่แม่นยำและวิธีทดสอบ API อย่างรวดเร็ว Apidog ให้คุณออกแบบ request, รัน test case และตรวจสอบ response ของ Bird SMS API ได้ทันทีโดยไม่ต้องเขียนโค้ด ลองใช้ Apidog ฟรีที่ &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;apidog.com&lt;/a&gt; และทดสอบ integration Bird SMS ของคุณภายในไม่กี่นาที&lt;/p&gt;



&lt;p&gt;บทความนี้จะลงลึกเรื่องค่าใช้จ่ายของ Bird SMS ปี 2025–2026, ปัจจัยที่อาจทำให้ต้นทุนเพิ่มขึ้น และเปรียบเทียบ Bird กับทางเลือกอื่น&lt;/p&gt;

&lt;h2&gt;
  
  
  ภาพรวมราคา SMS ของ Bird
&lt;/h2&gt;

&lt;p&gt;Bird ใช้โครงสร้างราคาแบบสองส่วนสำหรับ SMS:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;ค่าธรรมเนียมแพลตฟอร์ม&lt;/strong&gt; (รายเดือน)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ค่าธรรมเนียมต่อข้อความ&lt;/strong&gt; (จ่ายตามการใช้งานเกินแพลน)&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;แพลน&lt;/th&gt;
&lt;th&gt;ค่าใช้จ่ายรายเดือน&lt;/th&gt;
&lt;th&gt;SMS ที่รวมในแพลน&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ฟรี&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;5 SMS/วัน&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;td&gt;$49&lt;/td&gt;
&lt;td&gt;1,000 SMS/เดือน&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise&lt;/td&gt;
&lt;td&gt;กำหนดเอง&lt;/td&gt;
&lt;td&gt;ปริมาณกำหนดเอง&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;เมื่อส่ง SMS เกินจากแพลน จะคิดค่าบริการดังนี้ (สำหรับหมายเลขในสหรัฐอเมริกา):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SMS ขาออก&lt;/strong&gt;: $0.00331 ต่อข้อความ&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SMS ขาเข้า&lt;/strong&gt;: $0.003 ต่อข้อความ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ราคาสำหรับ CRM/Marketing Automation แสดงเป็น EUR ในหน้าราคาของ Bird ตัวเลข USD ในที่นี้สำหรับ API/นักพัฒนา ตรวจสอบตารางราคาปัจจุบันที่ &lt;a href="https://bird.com/en/pricing/sms" rel="noopener noreferrer"&gt;bird.com/en/pricing/sms&lt;/a&gt; เสมอ&lt;/p&gt;

&lt;h2&gt;
  
  
  รายละเอียดราคา: SMS, MMS, WhatsApp และอีเมล
&lt;/h2&gt;

&lt;h3&gt;
  
  
  SMS
&lt;/h3&gt;

&lt;p&gt;อัตราขาออกจากสหรัฐอเมริกา: $0.00331 ต่อข้อความ Bird เชื่อมต่อกับผู้ให้บริการในกว่า 150 ประเทศ ราคาต่อประเทศแตกต่างกัน เช่น:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ประเทศ&lt;/th&gt;
&lt;th&gt;อัตราขาออก (โดยประมาณ)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;สหรัฐอเมริกา&lt;/td&gt;
&lt;td&gt;~$0.00331&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;สหราชอาณาจักร&lt;/td&gt;
&lt;td&gt;~€0.036&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ออสเตรเลีย&lt;/td&gt;
&lt;td&gt;~€0.009&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;เยอรมนี&lt;/td&gt;
&lt;td&gt;~€0.056&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;อินเดีย&lt;/td&gt;
&lt;td&gt;แตกต่างกันไปตามเส้นทาง&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;บราซิล&lt;/td&gt;
&lt;td&gt;~€0.047&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;หมายเหตุ:&lt;/strong&gt; ข้อความในสหรัฐอเมริกา/แคนาดามีค่าธรรมเนียมผู้ให้บริการ (10DLC, Toll-Free) เพิ่มเติมจากอัตราพื้นฐาน&lt;/p&gt;

&lt;h3&gt;
  
  
  MMS
&lt;/h3&gt;

&lt;p&gt;MMS (ข้อความรูปภาพ) มีค่าใช้จ่ายสูงกว่า SMS รองรับเฉพาะสหรัฐและแคนาดา อัตราประมาณ 3–5 เท่าของ SMS ขึ้นอยู่กับแพลน ตรวจสอบ &lt;a href="https://bird.com/en/pricing/sms" rel="noopener noreferrer"&gt;bird.com/en/pricing/sms&lt;/a&gt; สำหรับอัตรา MMS ล่าสุด&lt;/p&gt;

&lt;h3&gt;
  
  
  WhatsApp
&lt;/h3&gt;

&lt;p&gt;Bird คิดค่าบริการสองส่วน:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;ค่าธรรมเนียมประมวลผล Bird&lt;/strong&gt; (ต่อ 1,000 ข้อความ):&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ปริมาณ&lt;/th&gt;
&lt;th&gt;ค่าธรรมเนียมต่อ 1,000 ข้อความ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1 – 1,000&lt;/td&gt;
&lt;td&gt;$0.001&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1,001 – 100,000&lt;/td&gt;
&lt;td&gt;$0.005&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100,001 – 500,000&lt;/td&gt;
&lt;td&gt;$0.0045&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;500,001+&lt;/td&gt;
&lt;td&gt;$0.004&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;ค่าธรรมเนียม Meta passthrough&lt;/strong&gt; (คิดตามการสนทนา แตกต่างตามประเทศ/ประเภท)

&lt;ul&gt;
&lt;li&gt;สหรัฐอเมริกา: 

&lt;ul&gt;
&lt;li&gt;การตลาด: $0.0250&lt;/li&gt;
&lt;li&gt;สาธารณูปโภค/ยืนยันตัวตน: $0.0034&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Bird ส่งผ่านค่าธรรมเนียม Meta ตามราคาต้นทุน&lt;/p&gt;

&lt;h3&gt;
  
  
  อีเมล
&lt;/h3&gt;

&lt;p&gt;API อีเมล เริ่มที่ $0.001 ต่อฉบับ ปริมาณมากราคาลดลง แพลน Pro รวม 10,000 อีเมล/เดือน&lt;/p&gt;

&lt;h3&gt;
  
  
  เสียง
&lt;/h3&gt;

&lt;p&gt;API เสียง คิดตามการใช้งาน โทรออกในสหรัฐฯ ~$0.013–$0.015 ต่อนาที โทรเข้าถูกกว่า ติดต่อ Bird หากส่งปริมาณมาก&lt;/p&gt;

&lt;h2&gt;
  
  
  ปัจจัยที่ส่งผลต่อค่าใช้จ่าย Bird ของคุณ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. กำหนดเส้นทางตามประเทศและผู้ให้บริการ
&lt;/h3&gt;

&lt;p&gt;SMS สหรัฐฯ ราคา $0.00331 แต่ประเทศอื่นอาจสูงกว่า 10–80 เท่า (เช่น เยอรมนี ~€0.056) ตรวจสอบ &lt;a href="https://bird.com/en/pricing/sms" rel="noopener noreferrer"&gt;Bird rate table&lt;/a&gt; ก่อนประมาณค่าใช้จ่ายระหว่างประเทศ&lt;/p&gt;

&lt;h3&gt;
  
  
  2. ประเภทหมายเลข
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Long codes (10DLC):&lt;/strong&gt; ต้องลงทะเบียนแบรนด์/แคมเปญ (TCR)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Short codes:&lt;/strong&gt; 5–6 หลัก, ปริมาณสูง, ค่าเช่ารายเดือนสูง ($500–$1,000)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Toll-free numbers:&lt;/strong&gt; ค่าเช่ารายเดือนต่ำกว่า, ปริมาณปานกลาง&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ค่าเช่าหมายเลขรายเดือนคิดแยกจากค่าบริการต่อข้อความ&lt;/p&gt;

&lt;h3&gt;
  
  
  3. ความยาวข้อความและการเข้ารหัส
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;SMS มาตรฐาน: 160 ตัวอักษร (GSM-7)&lt;/li&gt;
&lt;li&gt;เกิน 160 ตัวอักษร = โดนหั่นเป็นหลายส่วน คิดเงินแยกแต่ละส่วน&lt;/li&gt;
&lt;li&gt;Unicode (เช่น emoji, ตัวอักษรพิเศษ): จำกัด 70 ตัวอักษร/ส่วน&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. การผสมผสานช่องทาง
&lt;/h3&gt;

&lt;p&gt;ถ้า workflow ส่งข้อความ fallback ไป WhatsApp เมื่อ SMS ล้มเหลว จะมีค่าใช้จ่าย WhatsApp เพิ่ม ตรวจสอบ workflow ใน Flow Builder ก่อนใช้งานจริง&lt;/p&gt;

&lt;h3&gt;
  
  
  5. ปริมาณ
&lt;/h3&gt;

&lt;p&gt;Bird ไม่มี volume discount แบบเปิดเผย ผู้ส่งปริมาณมาก (ล้านข้อความ/เดือน) สามารถดีลอัตรา custom กับ Bird (Enterprise Plan)&lt;/p&gt;

&lt;h2&gt;
  
  
  ค่าใช้จ่ายและค่าธรรมเนียมแอบแฝง
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ค่าธรรมเนียมผู้ให้บริการในสหรัฐอเมริกา (10DLC)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ลงทะเบียนแบรนด์:&lt;/strong&gt; ครั้งเดียว ($4–$44)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ลงทะเบียนแคมเปญ:&lt;/strong&gt; รายเดือน (~$10/เดือน)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ค่าบริการต่อข้อความ:&lt;/strong&gt; เพิ่มอีกเล็กน้อย/ข้อความ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ค่าธรรมเนียมนี้ถูกกำหนดโดยผู้ให้บริการ (AT&amp;amp;T, T-Mobile, Verizon) Bird ส่งผ่านโดยไม่บวกกำไร&lt;/p&gt;

&lt;h3&gt;
  
  
  ค่าเช่าหมายเลขโทรศัพท์
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Long code US: $1–$2/เดือน&lt;/li&gt;
&lt;li&gt;Toll-free: $2–$3/เดือน&lt;/li&gt;
&lt;li&gt;Short code: $500–$1,000/เดือน&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Webhooks และการประมวลผลขาเข้า
&lt;/h3&gt;

&lt;p&gt;รับ SMS ขาเข้า คิดอัตราขาเข้า ($0.003/ข้อความ) ใช้งานเช่น reply opt-out หรือ คำหลักช่วยเหลือ จะคิดเงินตามนี้&lt;/p&gt;

&lt;h3&gt;
  
  
  ค่าสมัครสมาชิกแพลตฟอร์ม
&lt;/h3&gt;

&lt;p&gt;Pro $49/เดือน คือค่าใช้จ่ายคงที่ SMS 1,000 ข้อความ/เดือน เกินนี้คิดค่าบริการตามอัตรา&lt;/p&gt;

&lt;h2&gt;
  
  
  Bird เปรียบเทียบกับทางเลือกอื่นอย่างไร
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ผู้ให้บริการ&lt;/th&gt;
&lt;th&gt;SMS ขาออก (US)&lt;/th&gt;
&lt;th&gt;SMS ขาเข้า (US)&lt;/th&gt;
&lt;th&gt;หมายเหตุ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bird&lt;/td&gt;
&lt;td&gt;$0.00331&lt;/td&gt;
&lt;td&gt;$0.003&lt;/td&gt;
&lt;td&gt;อัตราพื้นฐานต่ำสุด; Omnichannel platform&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Twilio&lt;/td&gt;
&lt;td&gt;$0.0079&lt;/td&gt;
&lt;td&gt;$0.0079&lt;/td&gt;
&lt;td&gt;อัตราสูงกว่า; ระบบนิเวศขนาดใหญ่&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Telnyx&lt;/td&gt;
&lt;td&gt;~$0.004&lt;/td&gt;
&lt;td&gt;~$0.001&lt;/td&gt;
&lt;td&gt;แข่งขันได้; เชื่อมต่อผู้ให้บริการโดยตรง&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plivo&lt;/td&gt;
&lt;td&gt;$0.0055&lt;/td&gt;
&lt;td&gt;$0.0005&lt;/td&gt;
&lt;td&gt;ขาเข้าถูกกว่า; แพลตฟอร์มเรียบง่าย&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Bird ถูกกว่า Twilio มากในอัตราเริ่มต้น Telnyx และ Plivo ก็แข่งขันได้ ถ้าต้องการ SMS + WhatsApp + Email + Automation ในแพลตฟอร์มเดียว Bird คุ้มราคา ถ้าเน้นเฉพาะ SMS API พื้นฐาน Telnyx/Plivo อาจเหมาะกว่า&lt;/p&gt;

&lt;h2&gt;
  
  
  วิธีการเริ่มต้นใช้งาน Bird
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;สร้างบัญชีฟรี&lt;/strong&gt; ที่ &lt;a href="https://bird.com" rel="noopener noreferrer"&gt;bird.com&lt;/a&gt; แพลนฟรีส่ง SMS ได้ 5 ข้อความ/วัน โดยไม่ต้องใช้บัตรเครดิต&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ลงทะเบียนแบรนด์และแคมเปญ&lt;/strong&gt; ผ่านแดชบอร์ด Bird เพื่อให้สอดคล้องกับข้อกำหนด 10DLC (US) ใช้เวลา 1–3 วันทำการ&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;รับหมายเลขโทรศัพท์&lt;/strong&gt; จัดเตรียมหมายเลข long code ได้ผ่าน Numbers API หรือแดชบอร์ด&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ทดสอบ API เบื้องต้น&lt;/strong&gt;
Bird ใช้ REST API (JSON) ตัวอย่างการส่ง SMS:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s1"&gt;'https://api.bird.com/messages'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
     &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Authorization: AccessKey YOUR_API_KEY'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
     &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
     &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
       "originator": "+1234567890",
       "recipients": ["+1987654321"],
       "body": "ข้อความทดสอบจาก Bird API"
   }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ดูคู่มือเต็มได้ที่ &lt;a href="https://docs.bird.com" rel="noopener noreferrer"&gt;docs.bird.com&lt;/a&gt; (รองรับ SDK: Node.js, Python, PHP, Go, Java, Ruby) และตั้งค่า webhook ได้ทันที&lt;/p&gt;

&lt;h2&gt;
  
  
  บทสรุป
&lt;/h2&gt;

&lt;p&gt;Bird SMS API เสนออัตราเริ่มต้นต่ำสุดในตลาด ($0.00331/ข้อความขาออก US) แพลนฟรีช่วยให้ทดสอบ API ได้โดยไม่ต้องใช้บัตรเครดิต แพลน Pro เหมาะกับทีมที่เริ่มต้น ($49/เดือน 1,000 SMS)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ตรวจสอบต้นทุนแฝง&lt;/strong&gt;: ค่าธรรมเนียม 10DLC, ค่าเช่าหมายเลข, อัตราต่างประเทศที่สูงกว่ามาก รวมสิ่งเหล่านี้ในการประเมินงบประมาณตั้งแต่ต้น&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;เคล็ดลับ&lt;/strong&gt;: ใช้ Apidog ทดสอบ integration Bird SMS แบบ end-to-end ก่อน production ช่วยสร้าง request, กำหนด environment, เชื่อมโยง test case และ validate delivery ได้ในที่เดียว&lt;/p&gt;

&lt;h2&gt;
  
  
  คำถามที่พบบ่อย
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ราคา API SMS ของ Bird ต่อข้อความในสหรัฐอเมริกาเท่าไหร่?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
$0.00331 ต่อ SMS ขาออก, $0.003 ต่อ SMS ขาเข้า (US) อัตรานี้เป็นระดับ API นักพัฒนา มีค่าธรรมเนียม 10DLC เพิ่มเติม&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bird กับ MessageBird คือบริษัทเดียวกันหรือไม่?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ใช่ MessageBird เปลี่ยนชื่อเป็น Bird ในปี 2023 บริษัทก่อตั้งปี 2011 ลูกค้า Heineken, Booking.com, Uber, eBay จุดสิ้นสุด API เดิมบางส่วนยังใช้ชื่อ MessageBird&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;คิดค่าบริการ SMS ขาเข้าหรือไม่?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ใช่ Bird คิด $0.003 ต่อข้อความขาเข้าใน US ข้อความ opt-out/คำหลักช่วยเหลือ นับเป็นขาเข้า&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;แพลนฟรีของ Bird มีอะไรบ้าง?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
5 SMS/วัน, 10 อีเมล/วัน, 15 ข้อความ AI/วัน เข้าถึง API สาธารณะโดยไม่ต้องใช้บัตรเครดิต เหมาะกับการทดสอบ API&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SMS ของ Bird ถูกกว่า Twilio หรือไม่?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Bird ($0.00331) ถูกกว่า Twilio ($0.0079) มาก สำหรับ 100,000 ข้อความ/เดือน Bird ประมาณ $331, Twilio $790 (ยังไม่รวม discount ปริมาณของ Twilio)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ค่าธรรมเนียมแอบแฝง Bird SMS มีอะไรบ้าง?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
มีค่าธรรมเนียม 10DLC (ลงทะเบียนแบรนด์, แคมเปญ, ต่อข้อความ), ค่าเช่าหมายเลข ($1–$2/เดือน long code), ข้อความต่างประเทศราคาสูงกว่าข้อความ US มาก&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;จะทดสอบ Bird SMS API โดยไม่ส่งข้อความจริงได้อย่างไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ใช้ Smart Mock ของ Apidog จำลอง response ของ Bird API ระหว่าง dev หรือส่งข้อความทดสอบไปยังเบอร์ยืนยันผ่าน sandbox ของ Bird Apidog ช่วยเชื่อมโยง request และ validate response โดยไม่ต้องแตะ production&lt;/p&gt;




&lt;p&gt;&lt;em&gt;หากต้องการเริ่มต้นทดสอบ Bird SMS API อย่างรวดเร็วและไม่ยุ่งยากกับ production แนะนำให้ทดลองใช้ &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; วันนี้!&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>ราคา Twilio SMS API ปี 2026: เจาะลึกทุกรายละเอียด</title>
      <dc:creator>Thanawat Wongchai</dc:creator>
      <pubDate>Fri, 03 Apr 2026 04:02:46 +0000</pubDate>
      <link>https://dev.to/thanawat_wonchai/raakhaa-twilio-sms-api-pii-2026-ecchaaaluekthukraaylaeiiyd-1978</link>
      <guid>https://dev.to/thanawat_wonchai/raakhaa-twilio-sms-api-pii-2026-ecchaaaluekthukraaylaeiiyd-1978</guid>
      <description>&lt;h2&gt;
  
  
  สรุปสั้นๆ (TL;DR)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;SMS long code ของสหรัฐฯ (ขาออกและขาเข้า): &lt;strong&gt;$0.0083 ต่อข้อความ&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;MMS ขาออก: &lt;strong&gt;$0.022 ต่อข้อความ&lt;/strong&gt;; MMS ขาเข้า: &lt;strong&gt;$0.0165 ต่อข้อความ&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;SMS หมายเลขโทรฟรี: &lt;strong&gt;$0.0083 ต่อข้อความ&lt;/strong&gt; บวกค่าธรรมเนียมผู้ให้บริการเครือข่าย&lt;/li&gt;
&lt;li&gt;ค่าเช่า Short code: &lt;strong&gt;$1,000/เดือน&lt;/strong&gt; สำหรับรหัสแบบสุ่ม; &lt;strong&gt;$1,500/เดือน&lt;/strong&gt; สำหรับรหัสเฉพาะ (vanity code)&lt;/li&gt;
&lt;li&gt;การลงทะเบียนแบรนด์ 10DLC: &lt;strong&gt;ค่าธรรมเนียมครั้งเดียว $4.50&lt;/strong&gt; (อัปเดตสิงหาคม 2025); แคมเปญตั้งแต่ &lt;strong&gt;$1.50 ถึง $10/เดือน&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;หมายเลขโทรศัพท์ (long code): &lt;strong&gt;$1.15/เดือน&lt;/strong&gt;; หมายเลขโทรฟรี: &lt;strong&gt;$2.15/เดือน&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;ค่าธรรมเนียมผู้ให้บริการเครือข่ายจะถูกบวกเพิ่มจากราคาพื้นฐานทั้งหมด&lt;/li&gt;
&lt;li&gt;ส่วนลดตามปริมาณจะเริ่มใช้โดยอัตโนมัติเมื่อส่งข้อความเกิน 150,000 ข้อความต่อเดือน&lt;/li&gt;
&lt;li&gt;มีให้ทดลองใช้ฟรี; ไม่ต้องใช้บัตรเครดิตในการเริ่มต้น&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  บทนำ
&lt;/h2&gt;

&lt;p&gt;Twilio เป็น SMS API มาตรฐานสำหรับทีมพัฒนาส่วนใหญ่ เอกสารประกอบละเอียดถี่ถ้วน เวลาทำงานเชื่อถือได้ และ REST API ออกแบบมาอย่างดี แต่เมื่อคุณย้ายจากโปรเจกต์ส่วนตัวไปสู่แอปพลิเคชันจริง ค่าใช้จ่ายจะเพิ่มขึ้นอย่างรวดเร็ว เพราะคุณต้องจ่ายทั้งอัตราพื้นฐาน ค่าธรรมเนียมเครือข่าย ค่าหมายเลขโทรศัพท์ และอาจรวมถึงค่าลงทะเบียน 10DLC&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;ทดลองใช้ Apidog ได้เลย&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;ก่อนสร้างการเชื่อมต่อ SMS:&lt;/strong&gt; ทดสอบอย่างเหมาะสมด้วย Apidog สร้างสถานการณ์ทดสอบอัตโนมัติ ตรวจสอบ webhook ของ Twilio เทียบกับ OpenAPI spec ของคุณ ยืนยันรหัสสถานะ, ตรวจสอบ schema การตอบกลับ, และรัน contract test ใน CI/CD ได้&lt;br&gt;&lt;br&gt;
ลองใช้ Apidog ฟรีเพื่อตรวจสอบเวิร์กโฟลว์ SMS ของคุณก่อนนำไปใช้งานจริง&lt;/p&gt;

&lt;p&gt;บทความนี้แจกแจงรายละเอียดค่าใช้จ่ายทุกรายการของ Twilio ชี้ให้เห็นปัจจัยต้นทุน สิ่งที่มักถูกมองข้าม และเปรียบเทียบ Twilio กับตัวเลือกอื่น&lt;/p&gt;

&lt;h2&gt;
  
  
  ภาพรวมการกำหนดราคา Twilio SMS
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.twilio.com/en-us/pricing/messaging" rel="noopener noreferrer"&gt;Twilio ใช้การกำหนดราคาแบบจ่ายตามการใช้งานจริง (pay-as-you-go)&lt;/a&gt;&lt;br&gt;&lt;br&gt;
คุณจ่ายตามจำนวน message segment, หมายเลขโทรศัพท์, และฟีเจอร์เสริมหรือค่า registration ไม่มีสัญญาหรือขั้นต่ำ เว้นแต่ขอ volume discount กับ Twilio&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SMS long code สหรัฐฯ&lt;/strong&gt;: $0.0083 ต่อ segment (ขาเข้า/ขาออก)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;อย่าลืม:&lt;/strong&gt; ค่าธรรมเนียมเครือข่าย, ค่าเช่าหมายเลข, และ registration ถูกบวกเพิ่มอัตโนมัติ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;ส่วนลดตามปริมาณ&lt;/strong&gt;: อัตโนมัติ เมื่อส่งเกิน 150,000 ข้อความต่อเดือน (ต่อประเภทหมายเลข)&lt;/p&gt;

&lt;h2&gt;
  
  
  การแจกแจงราคา: SMS, MMS, หมายเลขโทรฟรี และ short codes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  SMS long code (หมายเลข 10 หลัก)
&lt;/h3&gt;

&lt;p&gt;Long code คือหมายเลขมาตรฐานสำหรับ A2P (application-to-person) ในสหรัฐฯ&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ประเภทข้อความ&lt;/th&gt;
&lt;th&gt;ราคาต่อส่วน&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SMS ขาออก&lt;/td&gt;
&lt;td&gt;$0.0083&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SMS ขาเข้า&lt;/td&gt;
&lt;td&gt;$0.0083&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MMS ขาออก&lt;/td&gt;
&lt;td&gt;$0.022&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MMS ขาเข้า&lt;/td&gt;
&lt;td&gt;$0.0165&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;ข้อควรทราบ:&lt;/strong&gt; Twilio คิดค่าบริการเป็น &lt;em&gt;message segment&lt;/em&gt; ไม่ใช่ต่อข้อความ  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ข้อความ GSM-7: 160 ตัวอักษร/segment
&lt;/li&gt;
&lt;li&gt;Unicode (อีโมจิ ฯลฯ): 70 ตัวอักษร/segment
&lt;/li&gt;
&lt;li&gt;ตัวอย่าง: 200 ตัวอักษร = 2 segment&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  หมายเลขโทรฟรี
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;SMS พื้นฐาน: $0.0083 ต่อส่วน (ขาเข้า/ขาออก)&lt;/li&gt;
&lt;li&gt;MMS ขาออก: $0.022; MMS ขาเข้า: $0.02&lt;/li&gt;
&lt;li&gt;ไม่ต้องลงทะเบียน 10DLC ประหยัดค่า setup&lt;/li&gt;
&lt;li&gt;แนะนำสำหรับการส่งทางเดียวปริมาณมาก&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Short code (หมายเลข 5-6 หลัก)
&lt;/h3&gt;

&lt;p&gt;Short code เหมาะสำหรับแคมเปญปริมาณสูง อัตรา SMS ต่อข้อความเท่ากันแต่ค่าเช่าแพงกว่า&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ประเภท Short code&lt;/th&gt;
&lt;th&gt;ค่าใช้จ่ายรายเดือน&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Short code แบบสุ่ม&lt;/td&gt;
&lt;td&gt;$1,000/เดือน (เก็บเงินรายไตรมาส)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Short code เฉพาะ (Vanity)&lt;/td&gt;
&lt;td&gt;$1,500/เดือน (เก็บเงินรายไตรมาส)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bring-your-own vanity&lt;/td&gt;
&lt;td&gt;$500/เดือน (เก็บเงินรายไตรมาส)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;เปิดใช้ MMS มีค่าธรรมเนียมครั้งเดียว $500&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ส่วนลดตามปริมาณ
&lt;/h3&gt;

&lt;p&gt;Twilio ลดราคาอัตโนมัติเป็นขั้นตามปริมาณ:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ข้อความต่อเดือน&lt;/th&gt;
&lt;th&gt;ราคาต่อส่วน&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1-150,000&lt;/td&gt;
&lt;td&gt;$0.0083&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;150,001-300,000&lt;/td&gt;
&lt;td&gt;$0.0081&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;300,001-500,000&lt;/td&gt;
&lt;td&gt;$0.0079&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;500,001-750,000&lt;/td&gt;
&lt;td&gt;$0.0077&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;750,001-1,000,000&lt;/td&gt;
&lt;td&gt;$0.0075&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1,000,001+&lt;/td&gt;
&lt;td&gt;$0.0073&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;ปริมาณแยกตามประเภทหมายเลข (long code, โทรฟรี, short code)&lt;/p&gt;

&lt;h2&gt;
  
  
  ปัจจัยที่ส่งผลต่อบิล Twilio ของคุณ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ประเภทหมายเลขโทรศัพท์
&lt;/h3&gt;

&lt;p&gt;หมายเลขที่ใช้ส่งกำหนดตารางอัตราและ threshold ส่วนลด&lt;/p&gt;

&lt;h3&gt;
  
  
  ส่วนของข้อความ
&lt;/h3&gt;

&lt;p&gt;ข้อความยาว/มี Unicode ถูกคิดหลาย segment ทำให้ต้นทุนพุ่ง&lt;/p&gt;

&lt;h3&gt;
  
  
  ค่าธรรมเนียมผู้ให้บริการเครือข่าย
&lt;/h3&gt;

&lt;p&gt;ค่าเครือข่ายถูกบวกเพิ่มจากอัตราพื้นฐาน ตัวอย่าง SMS ขาออก long code:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ผู้ให้บริการ&lt;/th&gt;
&lt;th&gt;ค่าธรรมเนียมขาออก&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AT&amp;amp;T&lt;/td&gt;
&lt;td&gt;$0.0035&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;T-Mobile&lt;/td&gt;
&lt;td&gt;$0.0045&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Verizon&lt;/td&gt;
&lt;td&gt;$0.004&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;US Cellular&lt;/td&gt;
&lt;td&gt;$0.005&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;อื่นๆ&lt;/td&gt;
&lt;td&gt;$0.004&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;MMS ค่าธรรมเนียมสูงขึ้น (AT&amp;amp;T: +$0.009, T-Mobile: +$0.01)&lt;/li&gt;
&lt;li&gt;ตัวอย่าง: ส่ง SMS ไปยัง AT&amp;amp;T = $0.0083 + $0.0035 = &lt;strong&gt;$0.0118&lt;/strong&gt; ต่อส่วน&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ประเทศปลายทาง
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;UK: $0.04 / อินเดีย: $0.0029 / บราซิล: $0.075
&lt;/li&gt;
&lt;li&gt;ดาวน์โหลด CSV ราคาเต็มได้จาก Twilio&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  การลงทะเบียน 10DLC
&lt;/h3&gt;

&lt;p&gt;ธุรกิจที่ส่ง A2P SMS บน long code ต้องลงทะเบียนแบรนด์+แคมเปญ ไม่ลงทะเบียนจะถูกกรองโดยเครือข่าย&lt;/p&gt;

&lt;h2&gt;
  
  
  ค่าใช้จ่ายและค่าธรรมเนียมแอบแฝง
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ค่าธรรมเนียมการลงทะเบียน 10DLC
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;แบรนด์ (Sole Proprietor/Low Volume):&lt;/strong&gt; $4.50 (ครั้งเดียว)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;แบรนด์ Standard:&lt;/strong&gt; $46 (ครั้งเดียว)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;แคมเปญ:&lt;/strong&gt; $15/ครั้ง (ตรวจสอบ), $1.50-$10/เดือน ขึ้นกับประเภท&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ประเภทแคมเปญ&lt;/th&gt;
&lt;th&gt;ค่าธรรมเนียมรายเดือน&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sole Proprietor&lt;/td&gt;
&lt;td&gt;$2/เดือน&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Low-volume mixed&lt;/td&gt;
&lt;td&gt;$1.50/เดือน&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;$10/เดือน&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;การกุศล/501(c)(3)&lt;/td&gt;
&lt;td&gt;$3/เดือน&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;บริการฉุกเฉิน&lt;/td&gt;
&lt;td&gt;$5/เดือน&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;ตรวจสอบมาตรฐาน: $41.50
&lt;/li&gt;
&lt;li&gt;อุทธรณ์: $11
&lt;/li&gt;
&lt;li&gt;Retry Authentication Plus: $12.50&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ค่าธรรมเนียมหมายเลขโทรศัพท์
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Long code: $1.15/เดือน&lt;/li&gt;
&lt;li&gt;โทรฟรี: $2.15/เดือน&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ค่าธรรมเนียมข้อความล้มเหลว
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;$0.001 ต่อข้อความที่ status "ล้มเหลว"&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ส่วนเสริมคุณสมบัติเสริม
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Engagement Suite: $0.015 ต่อข้อความขาออก (1,000 ข้อความแรก/เดือนฟรี)&lt;/li&gt;
&lt;li&gt;Compliance Toolkit: $0.015 ต่อข้อความขาออก&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  แผนการสนับสนุน
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Developer plan: $250/เดือน
&lt;/li&gt;
&lt;li&gt;Enterprise support สูงกว่า&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Twilio เปรียบเทียบกับทางเลือกอื่นอย่างไร
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ผู้ให้บริการ&lt;/th&gt;
&lt;th&gt;SMS ขาออกในสหรัฐฯ&lt;/th&gt;
&lt;th&gt;SMS ขาเข้าในสหรัฐฯ&lt;/th&gt;
&lt;th&gt;หมายเลขโทรศัพท์&lt;/th&gt;
&lt;th&gt;ต้องมี 10DLC&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Twilio&lt;/td&gt;
&lt;td&gt;$0.0083 + ค่าธรรมเนียมผู้ให้บริการ&lt;/td&gt;
&lt;td&gt;$0.0083 + ค่าธรรมเนียม&lt;/td&gt;
&lt;td&gt;$1.15/เดือน&lt;/td&gt;
&lt;td&gt;ใช่&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plivo&lt;/td&gt;
&lt;td&gt;$0.005&lt;/td&gt;
&lt;td&gt;$0.00035&lt;/td&gt;
&lt;td&gt;$0.80/เดือน&lt;/td&gt;
&lt;td&gt;ใช่&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Telnyx&lt;/td&gt;
&lt;td&gt;$0.004&lt;/td&gt;
&lt;td&gt;$0.004&lt;/td&gt;
&lt;td&gt;$1.00/เดือน&lt;/td&gt;
&lt;td&gt;ใช่&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bird (MessageBird เดิม)&lt;/td&gt;
&lt;td&gt;~$0.007&lt;/td&gt;
&lt;td&gt;~$0.007&lt;/td&gt;
&lt;td&gt;แตกต่าง&lt;/td&gt;
&lt;td&gt;ใช่&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Plivo และ Telnyx ราคาถูกกว่า โดยเฉพาะขาเข้าของ Plivo&lt;/li&gt;
&lt;li&gt;Telnyx รวมค่าธรรมเนียมเครือข่ายในราคา (ตรวจสอบรายละเอียดแต่ละเจ้า)&lt;/li&gt;
&lt;li&gt;Twilio เหนือกว่าด้านเอกสาร, integration, และ ecosystem&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  วิธีทดสอบ Twilio ฟรี
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;สมัครบัญชี Twilio ทดลองใช้งาน ไม่ต้องใช้บัตรเครดิต&lt;/li&gt;
&lt;li&gt;ได้เครดิตเริ่มต้น ส่งข้อความจริงได้&lt;/li&gt;
&lt;li&gt;ข้อความที่ส่งไปหมายเลขที่ยังไม่ยืนยันจะมี prefix "Sent from your Twilio trial account"&lt;/li&gt;
&lt;li&gt;การทดลองใช้ฟรีเหมาะสำหรับ:

&lt;ul&gt;
&lt;li&gt;จัดหาหมายเลขทดสอบ&lt;/li&gt;
&lt;li&gt;ส่ง/รับ SMS ผ่าน API&lt;/li&gt;
&lt;li&gt;ทดสอบ webhook ขาเข้า&lt;/li&gt;
&lt;li&gt;สำรวจ Twilio Console&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;เมื่ออัปเกรดบัญชีแบบชำระเงิน จะไม่มีข้อความ prefix และจ่ายเฉพาะที่ใช้จริง&lt;/p&gt;

&lt;h2&gt;
  
  
  วิธีทดสอบการเชื่อมต่อ Twilio SMS ของคุณด้วย Apidog
&lt;/h2&gt;

&lt;p&gt;หลังตั้งค่า Twilio credentials และ webhooks แล้ว ควรตรวจสอบการเชื่อมต่อด้วยวิธีอัตโนมัติ:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgcuec6nm1uksjpraul5p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgcuec6nm1uksjpraul5p.png" alt="การทดสอบ Twilio SMS กับ Apidog" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test Scenarios&lt;/strong&gt; ใน Apidog ช่วยให้คุณ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;นำเข้า Twilio webhook endpoint spec โดยตรง&lt;/li&gt;
&lt;li&gt;เพิ่มขั้นตอนแต่ละโฟลว์: ส่ง SMS, รับ callback, รับ inbound&lt;/li&gt;
&lt;li&gt;ใช้ orchestrate เปลี่ยนลำดับขั้นตอนและรันตามลำดับ&lt;/li&gt;
&lt;li&gt;ส่งค่าระหว่างขั้นตอนผ่าน &lt;code&gt;{{$.stepId.response.body.field}}&lt;/code&gt; (เช่น Message SID)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ตัวอย่าง flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ส่งข้อความผ่าน Twilio API&lt;/li&gt;
&lt;li&gt;รับ Message SID จาก response&lt;/li&gt;
&lt;li&gt;ตรวจสอบ webhook callback รับ SID กลับมาตรงตาม spec&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Contract Testing&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apidog ตรวจสอบ response จริงกับ OpenAPI spec อัตโนมัติ&lt;/li&gt;
&lt;li&gt;ยืนยัน HTTP status, ฟิลด์จำเป็น, ประเภทข้อมูล, ไม่มีฟิลด์เกิน&lt;/li&gt;
&lt;li&gt;ใช้งานได้ทั้ง API call, debug, test, และอัตโนมัติ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;เริ่มต้นใช้งาน:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ดาวน์โหลด Apidog ฟรี&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;นำเข้า Twilio API spec หรือกำหนด webhook schema&lt;/li&gt;
&lt;li&gt;สร้างสถานการณ์ทดสอบที่สะท้อน flow การส่ง/รับ SMS ของคุณ&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  บทสรุป
&lt;/h2&gt;

&lt;p&gt;Twilio SMS API เริ่มต้น $0.0083 ต่อส่วน (long code สหรัฐฯ) แต่ต้นทุนจริงรวมค่าธรรมเนียมเครือข่าย, ค่าเช่าหมายเลข, และค่าลงทะเบียน 10DLC ตัวอย่าง: ข้อความขาออก AT&amp;amp;T = $0.0118 ต่อส่วน ถ้ามีแคมเปญ 10DLC มาตรฐาน เพิ่ม $10/เดือน/แคมเปญ&lt;/p&gt;

&lt;p&gt;ราคามีความโปร่งใสและเอกสารดี ส่วนลดตามปริมาณอัตโนมัติ แต่ควรพิจารณาทุกรายการต้นทุน ไม่ใช่แค่อัตราที่ headline&lt;/p&gt;

&lt;p&gt;หลังประมาณต้นทุน: สร้าง connection และทดสอบให้ละเอียด&lt;br&gt;&lt;br&gt;
ใช้ Test Scenarios และ Contract Testing ของ Apidog ตรวจสอบ webhook flow และยืนยัน API response ตรงกับ spec โดยไม่ต้องเขียนโค้ดทดสอบซ้ำซ้อน&lt;/p&gt;

&lt;h2&gt;
  
  
  คำถามที่พบบ่อย
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ถาม: ราคาพื้นฐานสำหรับ SMS ขาออกของสหรัฐฯ บน Twilio คือเท่าไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ตอบ: $0.0083 ต่อส่วน (long code สหรัฐฯ) บวกค่าธรรมเนียมเครือข่าย เช่น AT&amp;amp;T เพิ่ม $0.0035 รวมเป็น $0.0118 ต่อส่วน&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ถาม: Twilio คิดค่าบริการสำหรับ SMS ขาเข้าหรือไม่?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ตอบ: คิด $0.0083 ต่อส่วน (long code/โทรฟรี) และอาจมีค่าธรรมเนียมเครือข่ายตามผู้ให้บริการ&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ถาม: 10DLC คืออะไร และต้องจ่ายค่าบริการหรือไม่?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ตอบ: 10DLC คือระบบ registration สำหรับ A2P SMS บน long code สหรัฐฯ ต้องลงทะเบียนแบรนด์ ($4.50 ครั้งเดียว) และค่าธรรมเนียมแคมเปญ ($1.50–$10/เดือน)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ถาม: Twilio short code มีค่าใช้จ่ายเท่าไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ตอบ: Short code แบบสุ่ม $1,000/เดือน (รายไตรมาส) Short code เฉพาะ $1,500/เดือน ค่าตั้งค่า MMS $500&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ถาม: Twilio มีส่วนลดตามปริมาณหรือไม่?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ตอบ: มีโดยอัตโนมัติ เริ่มลดราคาสำหรับข้อความเกิน 150,000 ต่อเดือน (ต่อประเภทหมายเลข) และมีส่วนลดสำหรับองค์กรโดยติดต่อฝ่ายขาย&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ถาม: Twilio มีการทดลองใช้ฟรีหรือไม่?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ตอบ: มีบัญชีทดลองฟรีพร้อมเครดิต ไม่ต้องใช้บัตรเครดิต ข้อความทดลองมี prefix จนกว่าจะอัปเกรดบัญชี&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ถาม: ทางเลือก Twilio ที่ถูกที่สุดสำหรับ SMS คืออะไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ตอบ: Plivo ($0.005) และ Telnyx ($0.004) ต่อข้อความ ราคาต่ำกว่า Twilio แต่ต้องลงทะเบียน 10DLC เช่นกัน Twilio เด่นกว่าด้านเอกสารและฟีเจอร์สำหรับ use case ซับซ้อน&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;ทดลองใช้ Apidog ได้เลย:&lt;/strong&gt; &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ดาวน์โหลด Apidog ฟรี&lt;/a&gt;&lt;br&gt;&lt;br&gt;
ตรวจสอบ เชื่อมต่อ ทดสอบ Twilio SMS อย่างอัตโนมัติและมั่นใจใน production!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>ราคา Vonage SMS API เท่าไหร่? (ราคาปี 2026)</title>
      <dc:creator>Thanawat Wongchai</dc:creator>
      <pubDate>Fri, 03 Apr 2026 03:55:52 +0000</pubDate>
      <link>https://dev.to/thanawat_wonchai/raakhaa-vonage-sms-api-ethaaaihr-raakhaapii-2026-3jej</link>
      <guid>https://dev.to/thanawat_wonchai/raakhaa-vonage-sms-api-ethaaaihr-raakhaapii-2026-3jej</guid>
      <description>&lt;h2&gt;
  
  
  สรุปโดยย่อ
&lt;/h2&gt;

&lt;p&gt;ราคา Vonage SMS API เริ่มต้นที่ &lt;strong&gt;$0.00809 ต่อข้อความขาออก&lt;/strong&gt; และ &lt;strong&gt;$0.00649 ต่อข้อความขาเข้า&lt;/strong&gt; ในสหรัฐอเมริกา ไม่มีค่าใช้จ่ายขั้นต่ำรายเดือน คุณจ่ายเฉพาะสิ่งที่ส่งและรับ อัตราค่าบริการระหว่างประเทศแตกต่างกันแต่ละประเทศ และบางตลาดอาจสูงกว่า $1.00 ต่อข้อความ หากคุณต้องการทดสอบการเชื่อมต่อ Vonage SMS, Apidog ช่วยให้คุณส่ง request ทดสอบ ตรวจสอบ response และแก้ไขข้อผิดพลาดก่อน deploy โค้ดจริง&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;ลองใช้ Apidog วันนี้&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  บทนำ
&lt;/h2&gt;

&lt;p&gt;ถ้าคุณเคยใช้ Nexmo คุณก็คือผู้ใช้งาน Vonage อยู่แล้ว Vonage เข้าซื้อ Nexmo ในปี 2016 โดย Nexmo คือแพลตฟอร์ม API สำหรับ SMS และ communications ที่โฟกัส developer ปัจจุบัน Vonage ยังคงใช้ &lt;code&gt;developer.vonage.com&lt;/code&gt; เป็นศูนย์กลางเอกสารและ support และในปี 2022 Vonage ก็ถูกรวมเป็นส่วนหนึ่งของ Ericsson แต่ยังคงแบรนด์ Vonage เอาไว้สำหรับธุรกิจ API&lt;/p&gt;

&lt;p&gt;ปัจจุบัน Vonage ให้บริการธุรกิจมากกว่า 100,000 ราย มีนักพัฒนาลงทะเบียน 1.6 ล้านคน ใช้ API ในการสร้างแอป เป็นแพลตฟอร์มแบบจ่ายจริงตามการใช้งาน (pay-as-you-go) ไม่มีสัญญาผูกมัด ใช้งานได้มากกว่า 190 ประเทศ&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 ก่อนเชื่อมต่อ API จริง คุณควรมีเครื่องมือทดสอบ API ที่เชื่อถือได้ &lt;strong&gt;Apidog&lt;/strong&gt; สามารถสร้าง test scenario สำหรับ Vonage SMS ตรวจสอบ response และจัดการ workflow API หลายรายการได้ในขั้นตอนเดียว ลองใช้ Apidog ฟรี ไม่ต้องใช้บัตรเครดิต&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  ภาพรวมราคา Vonage SMS
&lt;/h2&gt;

&lt;p&gt;Vonage ใช้โมเดล pay-as-you-go สำหรับ SMS API ไม่มีค่าใช้จ่ายแพลตฟอร์มหรือ subscription รายเดือน เริ่มต้นใช้งานได้ทันที ดูราคาได้จากประเทศปลายทางและประเภทหมายเลข&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ประเภทข้อความ&lt;/th&gt;
&lt;th&gt;ราคาต่อข้อความ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SMS ขาออก (US LVN)&lt;/td&gt;
&lt;td&gt;$0.00809&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SMS ขาเข้า (US LVN)&lt;/td&gt;
&lt;td&gt;$0.00649&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SMS ขาออก (US Toll-Free)&lt;/td&gt;
&lt;td&gt;ติดต่อฝ่ายขาย&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SMS ขาเข้า (US Toll-Free)&lt;/td&gt;
&lt;td&gt;ฟรี&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;LVN&lt;/strong&gt; = Local Virtual Number (10DLC)&lt;/li&gt;
&lt;li&gt;ราคาแต่ละประเทศแตกต่างกัน ดาวน์โหลดตารางราคาทั่วโลกจาก dashboard Vonage ได้&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  รายละเอียดราคา: ขาออก, ขาเข้า, MMS, และ WhatsApp
&lt;/h2&gt;

&lt;h3&gt;
  
  
  SMS ขาออก
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;ขาออก (US Local Virtual Number): &lt;strong&gt;$0.00809&lt;/strong&gt; ต่อข้อความ&lt;/li&gt;
&lt;li&gt;อัตรานี้อัปเดตจากหน้าราคา Vonage (ต้นปี 2026)&lt;/li&gt;
&lt;li&gt;ตรวจสอบอัตราปัจจุบันจากแดชบอร์ดเท่านั้น&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  SMS ขาเข้า
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;ขาเข้า (US LVN): &lt;strong&gt;$0.00649&lt;/strong&gt; ต่อข้อความ&lt;/li&gt;
&lt;li&gt;หมายเลขโทรฟรีบางประเภทขาเข้าฟรี ตรวจสอบก่อนใช้งานจริง&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ราคา MMS
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;รองรับ MMS ผ่าน Messages API&lt;/li&gt;
&lt;li&gt;ไม่มีการประกาศราคาสาธารณะ ต้องติดต่อฝ่ายขาย&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  WhatsApp ผ่าน Vonage
&lt;/h3&gt;

&lt;p&gt;WhatsApp มีค่าธรรมเนียม 2 ส่วน:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;ค่าธรรมเนียมของ WhatsApp&lt;/strong&gt; (Meta): คิดต่อข้อความและตามหมวดหมู่ แนะนำตรวจสอบ &lt;a href="https://www.facebook.com/business/help/205587591153507?id=2129163877102343" rel="noopener noreferrer"&gt;หน้าราคา WhatsApp ของ Meta&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ค่าธรรมเนียม Vonage Platform&lt;/strong&gt;: เริ่มต้น $0.00015 ต่อข้อความ&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Facebook Messenger
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Vonage คิด $0.0011 ต่อข้อความ ผ่าน Messages API&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  RCS (Rich Communication Services)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ผู้ให้บริการเครือข่าย&lt;/th&gt;
&lt;th&gt;RCS Rich (ข้อความ)&lt;/th&gt;
&lt;th&gt;RCS Rich Media&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;T-Mobile&lt;/td&gt;
&lt;td&gt;$0.00620&lt;/td&gt;
&lt;td&gt;$0.01250&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Verizon&lt;/td&gt;
&lt;td&gt;$0.00400&lt;/td&gt;
&lt;td&gt;$0.00600&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AT&amp;amp;T&lt;/td&gt;
&lt;td&gt;$0.00450&lt;/td&gt;
&lt;td&gt;$0.01000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;US Cellular&lt;/td&gt;
&lt;td&gt;$0.00620&lt;/td&gt;
&lt;td&gt;$0.01350&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;ค่าตั้งค่าประเทศ: &lt;strong&gt;$600&lt;/strong&gt; ต่อประเทศ (จ่ายครั้งเดียว) สำหรับ RCS&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ปัจจัยที่มีผลต่อบิล Vonage ของคุณ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ประเทศปลายทาง
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;SMS ที่ส่งไปสหรัฐฯ ราคาถูก&lt;/li&gt;
&lt;li&gt;ส่งไปตลาดที่ coverage ต่ำ (แอฟริกา, SEA) อาจสูงถึง $0.50+ ต่อข้อความ&lt;/li&gt;
&lt;li&gt;ตรวจสอบราคาก่อนวางแผนแคมเปญ&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ประเภทหมายเลข
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Long code (10DLC)&lt;/strong&gt;: ท้องถิ่น ถูกสุด เหมาะกับ P2P/A2P&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Toll-free&lt;/strong&gt;: ปริมาณสูง ขาเข้ามักฟรี&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Short code&lt;/strong&gt;: ปริมาณสูง ค่าเช่าแพง ต้องลงทะเบียนล่วงหน้า&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ค่าเช่าหมายเลข
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Long code US: สองสามดอลลาร์/เดือน&lt;/li&gt;
&lt;li&gt;Toll-free/Short code: แพงขึ้น&lt;/li&gt;
&lt;li&gt;คิดเพิ่มจากค่าข้อความ&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  การเข้ารหัสข้อความ
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GSM-7&lt;/strong&gt;: 160 ตัวอักษร/SMS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unicode&lt;/strong&gt;: 70 ตัวอักษร/SMS&lt;/li&gt;
&lt;li&gt;ข้อความ Unicode 200 ตัว = 3 ข้อความ&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ค่าธรรมเนียมเพิ่มเติมของผู้ให้บริการเครือข่าย
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;10DLC (A2P) มีค่าธรรมเนียม pass-through จากเครือข่าย&lt;/li&gt;
&lt;li&gt;ดูรายละเอียดในใบแจ้งหนี้รายเดือน&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ค่าใช้จ่ายแฝงที่ต้องระวัง
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ระดับการสนับสนุน
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;ฟรี: ฟอรัมและเอกสาร&lt;/li&gt;
&lt;li&gt;ธุรกิจ/พรีเมียม: $3,300/เดือน (support 24/7)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  API เสริม
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ส่วนเสริม&lt;/th&gt;
&lt;th&gt;ค่าใช้จ่ายรายเดือน&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Audit API&lt;/td&gt;
&lt;td&gt;$550/เดือน&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auto-redact (ลบ PII)&lt;/td&gt;
&lt;td&gt;$1,100/เดือน&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reports API&lt;/td&gt;
&lt;td&gt;$495/เดือน หรือ $0.00049/CDR&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Audit API สำหรับองค์กรที่ต้องตาม compliance&lt;/li&gt;
&lt;li&gt;Auto-redact สำหรับลบ PII อัตโนมัติ&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ค่าใช้จ่าย Verify API
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;$0.0572 ต่อการยืนยันสำเร็จ รวม attempt ข้อความ/เสียง&lt;/li&gt;
&lt;li&gt;Attempt ที่ไม่สำเร็จก็คิดค่าข้อความ&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  การลงทะเบียนหมายเลข (US 10DLC)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A2P SMS US&lt;/strong&gt;: ต้องลงทะเบียนกับ The Campaign Registry (TCR)&lt;/li&gt;
&lt;li&gt;Brand registration: ค่าธรรมเนียมครั้งเดียว&lt;/li&gt;
&lt;li&gt;Campaign registration: ค่าธรรมเนียมรายเดือน/แคมเปญ&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Vonage เทียบกับทางเลือกอื่น
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ผู้ให้บริการ&lt;/th&gt;
&lt;th&gt;SMS ขาออก US&lt;/th&gt;
&lt;th&gt;SMS ขาเข้า US&lt;/th&gt;
&lt;th&gt;ทดลองใช้ฟรี&lt;/th&gt;
&lt;th&gt;การสนับสนุน&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Vonage&lt;/td&gt;
&lt;td&gt;$0.00809&lt;/td&gt;
&lt;td&gt;$0.00649&lt;/td&gt;
&lt;td&gt;ใช่ (เฉพาะเบอร์ยืนยันแล้ว)&lt;/td&gt;
&lt;td&gt;ชำระเงิน; $3,300/เดือน สำหรับ 24/7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Twilio&lt;/td&gt;
&lt;td&gt;$0.0079&lt;/td&gt;
&lt;td&gt;$0.0075&lt;/td&gt;
&lt;td&gt;ใช่ (เครดิต $15)&lt;/td&gt;
&lt;td&gt;ชำระเงินเริ่ม $250/เดือน&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plivo&lt;/td&gt;
&lt;td&gt;$0.0055&lt;/td&gt;
&lt;td&gt;$0.0005&lt;/td&gt;
&lt;td&gt;ใช่&lt;/td&gt;
&lt;td&gt;ฟรีพื้นฐาน; มีชำระเงิน&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Telnyx&lt;/td&gt;
&lt;td&gt;$0.004&lt;/td&gt;
&lt;td&gt;$0.002&lt;/td&gt;
&lt;td&gt;ใช่ (เครดิต $5)&lt;/td&gt;
&lt;td&gt;อีเมลฟรี 24/7; โทรศัพท์ชำระเงิน&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;ข้อสังเกต:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Telnyx ถูกสุดแต่ใหม่กว่า&lt;/li&gt;
&lt;li&gt;Plivo ราคาขาเข้าแข่งได้&lt;/li&gt;
&lt;li&gt;Twilio เอกสาร/ระบบนิเวศดีที่สุดแต่แพงกว่า&lt;/li&gt;
&lt;li&gt;Vonage กลาง ๆ มีความสัมพันธ์กับผู้ให้บริการผ่าน Ericsson&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  วิธีทดลองใช้ Vonage ฟรี
&lt;/h2&gt;

&lt;p&gt;ดูรายละเอียด &lt;a href="https://www.vonage.com/communications-apis/pricing/" rel="noopener noreferrer"&gt;Vonage Communications APIs Pricing&lt;/a&gt;:&lt;/p&gt;

&lt;h3&gt;
  
  
  สิ่งที่คุณจะได้รับ
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;หมายเลขเสมือน Vonage สำหรับ test&lt;/li&gt;
&lt;li&gt;API key/secret พร้อมใช้งาน&lt;/li&gt;
&lt;li&gt;เข้าถึงเอกสาร, SDKs&lt;/li&gt;
&lt;li&gt;เครดิตทดลองส่งข้อความจำกัด&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ข้อจำกัด
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;ส่งข้อความได้เฉพาะเบอร์ที่ยืนยันในบัญชีเท่านั้น (ป้องกัน fraud)&lt;/li&gt;
&lt;li&gt;ส่งไปเบอร์อื่นต้องอัปเกรดบัญชี&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  วิธีเริ่มต้น
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;ไปที่ &lt;a href="https://dashboard.nexmo.com" rel="noopener noreferrer"&gt;dashboard.nexmo.com&lt;/a&gt; หรือ &lt;a href="https://www.vonage.com/communications-apis/" rel="noopener noreferrer"&gt;vonage.com/communications-apis&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;สมัครบัญชีฟรีด้วยอีเมล&lt;/li&gt;
&lt;li&gt;ยืนยันเบอร์โทรศัพท์&lt;/li&gt;
&lt;li&gt;รับ API key/secret จาก dashboard&lt;/li&gt;
&lt;li&gt;เรียก API แรกผ่าน REST API หรือ SDK&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ueumbyjp6vt2xicifxk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ueumbyjp6vt2xicifxk.png" alt="Vonage dashboard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vonage SDK รองรับ Node.js, Python, PHP, Ruby, Java, .NET, Go หรือจะเรียก REST API ตรงก็ได้&lt;/p&gt;

&lt;h2&gt;
  
  
  วิธีทดสอบการเชื่อมต่อ Vonage SMS ของคุณด้วย Apidog
&lt;/h2&gt;

&lt;p&gt;เมื่อมี API key/secret แล้ว ควรทดสอบการเชื่อมต่อก่อนใช้งานจริง Apidog ออกแบบมาเพื่อให้ workflow นี้เป็นอัตโนมัติ&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi04oh5iormtlr02zuvt3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi04oh5iormtlr02zuvt3.png" alt="Apidog Test Scenario"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test Scenarios&lt;/strong&gt; ของ Apidog ช่วยให้เชื่อมโยง API requests หลายรายการเป็น workflow เดียว เช่น ส่ง SMS → ตรวจสอบสถานะส่ง → handle error&lt;/p&gt;

&lt;h3&gt;
  
  
  การตั้งค่าสถานการณ์ทดสอบ
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;ไปที่โมดูล Tests ใน Apidog แล้วสร้าง test scenario ใหม่&lt;/li&gt;
&lt;li&gt;เพิ่มขั้นตอนจาก:

&lt;ul&gt;
&lt;li&gt;Import จาก API spec (OpenAPI)&lt;/li&gt;
&lt;li&gt;เพิ่ม request เอง (Vonage REST API endpoint)&lt;/li&gt;
&lt;li&gt;Import cURL จากเอกสาร Vonage&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;ตัวอย่าง:&lt;/strong&gt; ทดสอบส่ง SMS&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;เพิ่ม POST request ไปยัง &lt;code&gt;https://rest.nexmo.com/sms/json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;ใส่ API key, secret, from, to, text เป็น form params&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  การตรวจสอบการตอบกลับ
&lt;/h3&gt;

&lt;p&gt;Apidog ตรวจสอบ response อัตโนมัติตาม schema ที่กำหนด&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vonage SMS API จะตอบกลับ JSON object ที่มี &lt;code&gt;messages&lt;/code&gt; array&lt;/li&gt;
&lt;li&gt;ใน array จะมี &lt;code&gt;status&lt;/code&gt; ถ้า &lt;code&gt;0&lt;/code&gt; คือสำเร็จ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Validation ที่ควรเพิ่ม:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP status 200&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;messages[0].status&lt;/code&gt; == &lt;code&gt;"0"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;messages[0].message-id&lt;/code&gt; ต้องไม่ว่าง&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ถ้ารหัสสถานะผิด Apidog จะแสดงสีแดงและโชว์ response ให้ debug&lt;/p&gt;

&lt;h3&gt;
  
  
  การส่งข้อมูลระหว่างคำขอ
&lt;/h3&gt;

&lt;p&gt;ส่งค่าจาก response ของขั้นตอนก่อนหน้าไปยังขั้นตอนถัดไปได้ เช่น&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{{$.stepId.response.body.messages[0].message-id}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ใช้สำหรับ test workflow ที่ต้องใช้ message-id ตรวจสอบ delivery status&lt;/p&gt;

&lt;h3&gt;
  
  
  การรันทดสอบใน CI/CD
&lt;/h3&gt;

&lt;p&gt;Apidog เชื่อมต่อกับ GitHub Actions, GitLab CI, Jenkins ได้&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Export test scenario แล้ว run ผ่าน Apidog CLI&lt;/li&gt;
&lt;li&gt;ตรวจสอบการเชื่อมต่อ SMS ทุกครั้งที่มี pull request&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ทดลองใช้ฟรีที่ &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;apidog.com&lt;/a&gt; ไม่ต้องใช้บัตรเครดิต&lt;/p&gt;

&lt;h2&gt;
  
  
  สรุป
&lt;/h2&gt;

&lt;p&gt;Vonage SMS API คิดราคาตามการใช้งานจริง ไม่มีขั้นต่ำ ขาออก (US) $0.00809, ขาเข้า $0.00649 ค่าใช้จ่ายจริงขึ้นกับประเทศ, ประเภทหมายเลข, encoding และ feature พรีเมียม (Audit API, Auto-redact, 24/7 support) เพิ่มค่าใช้จ่ายรายเดือน ควรวางแผนงบประมาณให้เหมาะสม&lt;/p&gt;

&lt;p&gt;ถ้าต้องการราคาถูกกว่า Telnyx/Plivo เป็นทางเลือก แต่ Vonage เหนือกว่าเรื่อง reliability และ global access สำหรับ enterprise โดยเฉพาะที่ต้องการ network support จาก Ericsson&lt;/p&gt;

&lt;p&gt;ทดสอบ workflow SMS ทุกขั้นตอนก่อน production ด้วย Apidog สร้าง test scenario, validate response, แก้ไข error ตั้งแต่ dev stage&lt;/p&gt;

&lt;h2&gt;
  
  
  คำถามที่พบบ่อย
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Vonage เหมือน Nexmo ไหม?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ใช่ Vonage ซื้อ Nexmo ในปี 2016 ใช้ platform และ API เดียวกัน developer.vonage.com/ rest.nexmo.com&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vonage มีค่ารายเดือน SMS หรือไม่?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ไม่มี คิดเฉพาะค่าข้อความและค่าเช่าหมายเลข ส่วนเสริมมีค่ารายเดือน&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ค่าเช่าหมายเลข Vonage เท่าไหร่?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Long code US เริ่มต้นสองสามดอลลาร์ต่อเดือน Toll-free/Short code แพงกว่า ตรวจสอบใน dashboard&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vonage SMS รองรับประเทศไหน?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
รองรับมากกว่า 190 ประเทศ ราคาต่างกัน โหลดตารางราคาใน dashboard&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vonage มีส่วนลดปริมาณการใช้งานไหม?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
มี ถ้าปริมาณสูง ติดต่อฝ่ายขายเจรจาราคา&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;รับ SMS ขาเข้าได้ฟรีหรือไม่?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Toll-free US: ขาเข้าฟรี Long code US: $0.00649/ข้อความ ประเทศอื่นราคาต่างกัน&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vonage vs Twilio SMS?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Vonage ($0.00809) แพงกว่า Twilio ($0.0079) นิดเดียว Twilio เอกสาร/connection มากกว่า Vonage เหมาะกับ reliability/network support ผ่าน Ericsson ประสบการณ์ dev/support เป็นตัวตัดสิน&lt;/p&gt;

</description>
    </item>
    <item>
      <title>วิธีรัน Gemma 4 แบบ Local ด้วย Ollama: คู่มือฉบับสมบูรณ์</title>
      <dc:creator>Thanawat Wongchai</dc:creator>
      <pubDate>Fri, 03 Apr 2026 02:55:12 +0000</pubDate>
      <link>https://dev.to/thanawat_wonchai/withiiran-gemma-4-aebb-local-dwy-ollama-khuumuuechbabsmbuurn-k2</link>
      <guid>https://dev.to/thanawat_wonchai/withiiran-gemma-4-aebb-local-dwy-ollama-khuumuuechbabsmbuurn-k2</guid>
      <description>&lt;h2&gt;
  
  
  สรุปย่อ (TL;DR)
&lt;/h2&gt;

&lt;p&gt;Gemma 4 เปิดตัวเมื่อวันที่ 3 เมษายน 2026 และ Ollama v0.20.0 ได้เพิ่มการรองรับในวันเดียวกัน คุณสามารถดึงและรันโมเดลเริ่มต้น &lt;code&gt;gemma4:e4b&lt;/code&gt; ได้ด้วยคำสั่งเพียงสองคำสั่ง คู่มือนี้จะแนะนำคุณเกี่ยวกับการตั้งค่า การเลือกโมเดล การใช้งาน API และวิธีทดสอบ Gemma 4 endpoints ในเครื่องของคุณด้วย Apidog&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;ทดลองใช้ Apidog วันนี้&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  บทนำ
&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://apidog.com/blog/gemma-4-api/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Google ได้เปิดตัว Gemma 4&lt;/a&gt; เมื่อวันที่ 2 เมษายน 2026 ภายใน 24 ชั่วโมง Ollama ได้ออกเวอร์ชัน v0.20.0 พร้อมการรองรับเต็มรูปแบบสำหรับโมเดลทั้งสี่รูปแบบ&lt;/p&gt;

&lt;p&gt;สำหรับนักพัฒนา Gemma 4 คือการอัปเกรดครั้งใหญ่: ทำคะแนน 89.2% ใน AIME 2026 เทียบกับ Gemma 3 ที่ได้ 20.8% และคะแนนการเขียนโค้ดเพิ่มจาก 110 ELO เป็น 2150 บน Codeforces คุณจะได้ฟีเจอร์ function calling, โหมดให้เหตุผลที่ปรับแต่งได้ และ context window สูงสุด 256K — ทั้งหมดนี้รันบนฮาร์ดแวร์ของคุณเอง&lt;/p&gt;

&lt;p&gt;ถ้าคุณสร้างแอปที่ขับเคลื่อนด้วย API การรัน LLM ในเครื่องจะช่วยให้ได้เลเยอร์ AI ที่เร็วและปลอดภัยสำหรับ mock ข้อมูล, สร้าง test scenario, และตรวจสอบ API response โดยไม่ต้องส่งข้อมูลออกนอก&lt;/p&gt;

&lt;p&gt;💡 เมื่อมี Gemma 4 ในเครื่องแล้ว Smart Mock ของ Apidog จะใช้ AI inference สร้าง mock API response ที่สมจริงจาก schema ของคุณโดยอัตโนมัติ แค่กำหนด API schema ครั้งเดียว Apidog จัดการ mock data ให้เอง เหมาะกับการทดลอง LLM ในเครื่องที่อยากได้ test data ตรง schema โดยไม่ต้องเขียน fixture เอง&lt;/p&gt;

&lt;p&gt;คู่มือนี้จะสอนตั้งแต่การติดตั้งจนถึงการเรียกใช้งาน Gemma 4 API ในเครื่อง&lt;/p&gt;

&lt;h2&gt;
  
  
  มีอะไรใหม่ใน Gemma 4
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://blog.google/innovation-and-ai/technology/developers-tools/gemma-4/" rel="noopener noreferrer"&gt;Gemma 4&lt;/a&gt; มีโมเดล 4 รุ่น ที่ตอบโจทย์ hardware และ use case ต่างกัน&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsos2mixfbxq6ww8ghoy8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsos2mixfbxq6ww8ghoy8.png" alt="ภาพหน้าจอแสดงการเปรียบเทียบสี่โมเดล Gemma 4"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;จุดเด่นเมื่อเทียบกับ Gemma 3:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;การให้เหตุผล/การเขียนโค้ด&lt;/strong&gt;: 31B ทำคะแนน 80% ใน LiveCodeBench v6 (Gemma 3 27B ได้แค่ 29.1%)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mixture-of-Experts (MoE)&lt;/strong&gt;: 26B ใช้ MoE เปิดใช้งานแค่ 4B parameters ต่อ inference คุณภาพใกล้เรือธงแต่เบาลงมาก&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;บริบทยาว&lt;/strong&gt;: E2B/E4B รองรับ 128K tokens, 26B/31B รองรับ 256K&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Function calling&lt;/strong&gt;: ทุกโมเดลรองรับ native structured tool use รับ/คืน JSON ตรง schema โดยไม่ต้อง prompt engineering&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;รับอินพุตเสียง/รูป&lt;/strong&gt;: E2B/E4B รองรับ input เสียงและรูปภาพ&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chain-of-Thought (CoT) mode&lt;/strong&gt;: เปิด/ปิด reasoning per request ได้&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  คำอธิบายโมเดล Gemma 4 รุ่นต่างๆ
&lt;/h2&gt;

&lt;p&gt;เลือกโมเดลให้เหมาะกับเครื่องของคุณ:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;โมเดล&lt;/th&gt;
&lt;th&gt;ขนาดบนดิสก์&lt;/th&gt;
&lt;th&gt;บริบท&lt;/th&gt;
&lt;th&gt;สถาปัตยกรรม&lt;/th&gt;
&lt;th&gt;เหมาะสำหรับ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gemma4:e2b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;7.2 GB&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;Dense&lt;/td&gt;
&lt;td&gt;แล็ปท็อป, edge, เสียง/รูป&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;gemma4:e4b&lt;/code&gt; (default)&lt;/td&gt;
&lt;td&gt;9.6 GB&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;Dense&lt;/td&gt;
&lt;td&gt;นักพัฒนาส่วนใหญ่&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gemma4:26b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;18 GB&lt;/td&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;td&gt;MoE (4B active)&lt;/td&gt;
&lt;td&gt;คุณภาพดีที่สุดต่อ GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gemma4:31b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;20 GB&lt;/td&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;td&gt;Dense&lt;/td&gt;
&lt;td&gt;คุณภาพสูงสุด&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;e4b&lt;/code&gt; คือ default (ใช้ &lt;code&gt;ollama run gemma4&lt;/code&gt;) เหมาะกับ GPU 10+GB VRAM หรือ Apple Silicon รวม 16GB RAM&lt;/p&gt;

&lt;p&gt;&lt;code&gt;26b&lt;/code&gt; (MoE) เหมาะกับ RAM 20+GB inference เร็วใกล้ 4B แต่คุณภาพเหมือน 13B&lt;/p&gt;

&lt;h2&gt;
  
  
  ข้อกำหนดเบื้องต้น
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Ollama v0.20.0+ (เวอร์ชันก่อนหน้าไม่รองรับ Gemma 4)&lt;/li&gt;
&lt;li&gt;ตรวจสอบเวอร์ชัน:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  ollama &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;อัปเดต Ollama:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="c"&gt;# macOS&lt;/span&gt;
  brew upgrade ollama

  &lt;span class="c"&gt;# Linux&lt;/span&gt;
  curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://ollama.com/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Windows: ดาวน์โหลดจาก &lt;a href="https://ollama.com/" rel="noopener noreferrer"&gt;ollama.com&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hardware:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;e2b&lt;/code&gt;: RAM 8GB+ (แนะนำ 16GB)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;e4b&lt;/code&gt;: VRAM 10GB หรือ Unified 16GB&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;26b&lt;/code&gt;: RAM/Unified 20GB+&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;31b&lt;/code&gt;: VRAM 24GB หรือ Unified 32GB&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  การติดตั้งและรัน Gemma 4
&lt;/h2&gt;

&lt;p&gt;ดึงและรัน e4b (default):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama run gemma4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8678q5cv6x7szg7u7lfq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8678q5cv6x7szg7u7lfq.png" alt="ภาพหน้าจอแสดงการทำงานของคำสั่ง ollama run gemma4 ในเทอร์มินัล"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;จะดาวน์โหลด ~9.6GB แล้วเข้าสู่ interactive prompt ลองพิมพ์:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; รหัสสถานะ HTTP สำหรับข้อผิดพลาดของไคลเอ็นต์คืออะไร?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;รันรุ่นอื่น:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Edge, ขนาดเล็ก&lt;/span&gt;
ollama run gemma4:e2b

&lt;span class="c"&gt;# MoE (คุ้มคุณภาพ/ขนาด)&lt;/span&gt;
ollama run gemma4:26b

&lt;span class="c"&gt;# Full flagship&lt;/span&gt;
ollama run gemma4:31b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ดึง model เฉยๆ (ไม่รัน):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama pull gemma4
ollama pull gemma4:26b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ลิสต์โมเดลที่มี:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  การใช้ Gemma 4 API ในเครื่อง
&lt;/h2&gt;

&lt;p&gt;Ollama เปิด REST API ที่ &lt;code&gt;http://localhost:11434&lt;/code&gt; เรียกผ่าน HTTP client ได้เลย&lt;/p&gt;

&lt;h3&gt;
  
  
  สร้าง completion
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://localhost:11434/api/generate &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "gemma4",
    "prompt": "เขียนการตอบสนอง JSON สำหรับ API endpoint โปรไฟล์ผู้ใช้",
    "stream": false
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  แชทแบบ OpenAI-compatible
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://localhost:11434/v1/chat/completions &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "gemma4",
    "messages": [
      {
        "role": "user",
        "content": "สร้าง mock JSON ที่สมจริงสำหรับการตอบสนอง API คำสั่งซื้ออีคอมเมิร์ซ"
      }
    ]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ไคลเอนต์ Python
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;ask_gemma4&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemma4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:11434/api/generate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;stream&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;response&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ask_gemma4&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;แสดงรายการฟิลด์ที่การตอบสนอง API การชำระเงินควรรวมถึง&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ใช้ OpenAI Python SDK
&lt;/h3&gt;

&lt;p&gt;Ollama API compatible กับ OpenAI SDK:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:11434/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ollama&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# จำเป็นโดย SDK แต่ไม่ได้ใช้โดย Ollama
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemma4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;คุณสร้างข้อมูลการตอบสนอง API ที่สมจริงในรูปแบบ JSON&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;สร้างตัวอย่างการตอบสนองสำหรับ endpoint GET /users/{id}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  การใช้ Function Calling กับ Gemma 4
&lt;/h2&gt;

&lt;p&gt;Gemma 4 รองรับ function calling แบบ native แค่กำหนด schema function/tool โมเดลจะส่งคืน JSON ตรงลายเซ็นของคุณ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:11434/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ollama&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;tools&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;function&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;function&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;get_user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;เรียกผู้ใช้ด้วย ID จาก API&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;parameters&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;properties&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;integer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;รหัสผู้ใช้ที่ไม่ซ้ำกัน&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                    &lt;span class="p"&gt;},&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;include_orders&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;boolean&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ว่าจะรวมประวัติคำสั่งซื้อหรือไม่&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;},&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;required&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemma4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ดึงผู้ใช้ 42 พร้อมประวัติคำสั่งซื้อของเขา&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tool_choice&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;auto&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;tool_call&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tool_calls&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tool_call&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;function&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;       &lt;span class="c1"&gt;# get_user
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tool_call&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;function&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;arguments&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# {"user_id": 42, "include_orders": true}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;โมเดลจะ extract parameter ตรงจากภาษาไทยและคืน JSON ตาม schema ไม่ต้อง regex/parse output เอง&lt;/p&gt;

&lt;h2&gt;
  
  
  การเปิดใช้งานโหมดการคิด
&lt;/h2&gt;

&lt;p&gt;เหมาะกับงานให้เหตุผลเชิงซับซ้อน เช่น test scenario หรือวิเคราะห์ API spec:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemma4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ออกแบบสถานการณ์การทดสอบที่สมบูรณ์สำหรับ API การประมวลผลการชำระเงินพร้อม edge cases&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;extra_body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;think&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ถ้าแค่ mock ง่ายๆ ไม่ต้องเปิดโหมดนี้ (ลด latency)&lt;/p&gt;

&lt;h2&gt;
  
  
  การทดสอบการตอบสนอง Gemma 4 API ด้วย Apidog
&lt;/h2&gt;

&lt;p&gt;เมื่อ Gemma 4 ในเครื่องทำงานแล้ว ทดสอบ endpoint ด้วย Apidog ได้ทันที&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fci3hhb0u9dmnzb9i72vs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fci3hhb0u9dmnzb9i72vs.png" alt="ภาพหน้าจอของ Apidog แสดงการตั้งค่าการทดสอบ API สำหรับ Gemma 4"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ขั้นตอน:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;นำเข้าข้อกำหนด Ollama API&lt;/strong&gt;: สร้างโปรเจกต์ใหม่ใน &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; แล้วตั้ง base URL เป็น &lt;code&gt;http://localhost:11434&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;กำหนด endpoint&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;POST /api/generate&lt;/code&gt; (completion)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;POST /v1/chat/completions&lt;/code&gt; (แชท)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GET /api/tags&lt;/code&gt; (ลิสต์โมเดล)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;ตั้ง test scenario&lt;/strong&gt;:

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;GET /api/tags&lt;/code&gt; – เช็คว่า &lt;code&gt;gemma4&lt;/code&gt; อยู่ในโมเดล&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;POST /api/generate&lt;/code&gt; – ส่ง prompt แล้ว assert ว่า field &lt;code&gt;response&lt;/code&gt; มีข้อมูล&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;POST /v1/chat/completions&lt;/code&gt; – ส่งแชทแล้วตรวจสอบว่าตรง format ที่ต้องการ&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;ใช้ Extract Variable ใน Apidog เพื่อ re-use response แต่ละ step ทดสอบ multi-turn flow ได้อัตโนมัติ&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Contract Testing&lt;/strong&gt;: เช็คว่า response ตรง OpenAPI spec ทุกครั้งหลังเปลี่ยน model&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart Mock&lt;/strong&gt;: กำหนด schema response ของ Gemma 4 แล้ว Smart Mock สร้าง mock data ให้ทีม front-end ใช้งานได้ทันที โดยไม่ต้องรอ LLM จริง&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  อินพุตแบบหลายโมดอลด้วย Gemma 4
&lt;/h2&gt;

&lt;p&gt;E2B/E4B รับรูปภาพพร้อมข้อความ ส่งรูปเป็น base64 string:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;api_diagram.png&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;image_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;b64encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemma4:e4b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data:image/png;base64,&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;image_data&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;},&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;อธิบายโฟลว์ API ที่แสดงในแผนภาพนี้และระบุเส้นทางข้อผิดพลาดที่อาจเกิดขึ้น&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เหมาะกับการวิเคราะห์ diagram, ตรวจสอบ screenshot docs, หรือดึงข้อมูลจากรูปภาพ (input multimodal)&lt;/p&gt;

&lt;h2&gt;
  
  
  ปัญหาและการแก้ไขทั่วไป
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ollama แจ้งว่าไม่พบโมเดล&lt;/strong&gt;: รัน &lt;code&gt;ollama pull gemma4&lt;/code&gt; หรือดูด้วย &lt;code&gt;ollama list&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inference ช้าบน CPU&lt;/strong&gt;: ใช้ e2b (7.2GB) สำหรับเครื่องไม่มี GPU&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;หน่วยความจำไม่พอ&lt;/strong&gt;: ตรวจสอบ VRAM/Unified RAM ด้วย &lt;code&gt;ollama ps&lt;/code&gt; ถ้าไม่พอให้ใช้ e2b&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;โมเดลไม่โหลดบน Apple Silicon&lt;/strong&gt;: Ollama 0.20.0 ขึ้นไปเท่านั้น&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;พอร์ต 11434 ถูกใช้&lt;/strong&gt;: ตั้งค่าพอร์ตเอง &lt;code&gt;OLLAMA_HOST=0.0.0.0:11435 ollama serve&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Response ตัดทอน&lt;/strong&gt;: เพิ่ม context window &lt;code&gt;"options": {"num_ctx": 8192}&lt;/code&gt; ใน payload&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Gemma 4 เทียบกับโมเดลในเครื่องอื่นๆ
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;โมเดล&lt;/th&gt;
&lt;th&gt;ขนาดที่เหมาะกับผู้ใช้ทั่วไป&lt;/th&gt;
&lt;th&gt;บริบท&lt;/th&gt;
&lt;th&gt;Function Calling&lt;/th&gt;
&lt;th&gt;Benchmark Coding&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Gemma 4&lt;/td&gt;
&lt;td&gt;e4b (9.6 GB)&lt;/td&gt;
&lt;td&gt;128K-256K&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;80% LiveCodeBench&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Llama 3.3&lt;/td&gt;
&lt;td&gt;70B-Q4 (40 GB)&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;~60% LiveCodeBench&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3.6-Plus&lt;/td&gt;
&lt;td&gt;72B-Q4 (44 GB)&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;แข็งแกร่ง&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mistral Small&lt;/td&gt;
&lt;td&gt;24B (14 GB)&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;ปานกลาง&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;จุดเด่น:&lt;/strong&gt; Gemma 4 26B (MoE) ขนาด 18GB คุณภาพใกล้ flagship แต่ inference เร็วกว่า dense ใหญ่ๆ เหมาะกับ dev ส่วนมาก&lt;/p&gt;

&lt;p&gt;31B เหมาะกับงานโค้ด, e2b เหมาะกับ edge/laptop (&amp;lt;8GB RAM)&lt;/p&gt;

&lt;h2&gt;
  
  
  สรุป
&lt;/h2&gt;

&lt;p&gt;Gemma 4 + Ollama คือ LLM ในเครื่องที่ทรงพลัง ติดตั้งง่ายมาก (&lt;code&gt;ollama run gemma4&lt;/code&gt;) ใช้ API ได้ทันที คุณภาพการ reasoning และ code generation สูงกว่า Gemma 3 แบบก้าวกระโดด&lt;/p&gt;

&lt;p&gt;เริ่มด้วย e4b ทดสอบ API ด้วย Apidog ให้ endpoints ทำงานครบ เลือกรุ่นที่เหมาะกับงานจากตารางข้างบน&lt;/p&gt;

&lt;p&gt;ถ้าสร้างระบบ API บน Gemma 4 จับคู่ inference ในเครื่องกับ Smart Mock และ Test Scenario ของ Apidog จะช่วยให้ dev cycle เร็วและไม่ง้อ resource ภายนอก&lt;/p&gt;

&lt;h2&gt;
  
  
  คำถามที่พบบ่อย (FAQ)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: อัปเดต Gemma 4 ใน Ollama ได้อย่างไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: รัน &lt;code&gt;ollama pull gemma4&lt;/code&gt; Ollama จะโหลดเฉพาะ patch ใหม่&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: รันบนเครื่องไม่มี GPU ได้ไหม?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: ได้ แต่ช้า (~1-3 tokens/sec) ควรใช้ e2b สำหรับเครื่อง CPU-only&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: gemma4:e2b กับ gemma4:e4b ต่างกันยังไง?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: ทั้งคู่เป็น dense, e4b ใหญ่กว่า reasoning ดีกว่า, e2b เล็ก/รองรับเสียง&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: ใช้กับ LangChain/LlamaIndex ได้ไหม?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: ได้ ทั้งคู่รองรับ Ollama ชี้ endpoint เป็น &lt;code&gt;http://localhost:11434&lt;/code&gt;, ใช้ &lt;code&gt;gemma4&lt;/code&gt; เป็นชื่อโมเดล&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Ollama API ในเครื่อง compatible กับ OpenAI API ไหม?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: ส่วนใหญ่แล้ว ใช้ &lt;code&gt;/v1/chat/completions&lt;/code&gt; เปลี่ยน &lt;code&gt;base_url&lt;/code&gt; เป็น &lt;code&gt;http://localhost:11434/v1&lt;/code&gt; ใส่ &lt;code&gt;api_key&lt;/code&gt; เป็นอะไรก็ได้&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: เปิดโหมดการคิดยังไง?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: ส่ง &lt;code&gt;"think": true&lt;/code&gt; ใน &lt;code&gt;extra_body&lt;/code&gt; (OpenAI SDK) หรือ JSON ตรงๆ&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: ให้ Gemma 4 บริการเครื่องอื่นใน network ได้ไหม?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: ได้ รัน &lt;code&gt;OLLAMA_HOST=0.0.0.0:11434 ollama serve&lt;/code&gt; แล้วเครื่องอื่นเรียกที่ IP/PORt นี้&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: เลือกโมเดลไหนสำหรับพัฒนา API?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: mock/test case — ใช้ e4b, วิเคราะห์ spec/arch ซับซ้อน — 26b (MoE) คุ้มกว่า 31b&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;หมายเหตุ:&lt;/strong&gt; ลิงก์ที่เกี่ยวข้อง Apidog ในโพสต์นี้จะถูกติดตามด้วย UTM สำหรับ dev.to&lt;/p&gt;

</description>
    </item>
    <item>
      <title>วิธีใช้ Gemma 4 เป็น API Backend</title>
      <dc:creator>Thanawat Wongchai</dc:creator>
      <pubDate>Fri, 03 Apr 2026 02:44:03 +0000</pubDate>
      <link>https://dev.to/thanawat_wonchai/withiiaich-gemma-4-epn-api-backend-ljp</link>
      <guid>https://dev.to/thanawat_wonchai/withiiaich-gemma-4-epn-api-backend-ljp</guid>
      <description>&lt;p&gt;&lt;strong&gt;สรุป:&lt;/strong&gt; Google เปิดตัว Gemma 4 ในเดือนเมษายน 2026 เป็นตระกูลโมเดลโอเพนซอร์ส 4 ขนาด ภายใต้ Apache 2.0 ประสิทธิภาพสูงกว่าคู่แข่งขนาดใหญ่กว่า 20 เท่าในการทดสอบมาตรฐาน สามารถเรียกใช้ Gemma 4 API ผ่าน Google AI Studio, Vertex AI หรือรันแบบโลคัลกับ Ollama/vLLM จับคู่กับ Smart Mock ของ Apidog เพื่อสร้าง API mock responses จาก OpenAPI schemas ได้โดยอัตโนมัติ ไม่ต้องเขียน mock rule แม้แต่ข้อเดียว&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;ทดลองใช้ Apidog วันนี้&lt;/a&gt;
&lt;/p&gt;

&lt;h2 id="บทนำ"&gt;บทนำ&lt;/h2&gt;

&lt;p&gt;โมเดล AI โอเพนซอร์สมักบังคับให้คุณเลือกระหว่างความสามารถและการนำไปใช้งาน: โมเดลใหญ่เกินไปรันบนแล็ปท็อปไม่ได้ หรือเล็กเกินไปไม่เหมาะกับ reasoning หลายขั้นตอน Gemma 4 ทำลายข้อจำกัดนี้&lt;/p&gt;

&lt;p&gt;Gemma 4 คือชุดโมเดลโอเพนซอร์สระดับสูงสุดของ Google DeepMind ขณะนี้ 31B Dense ติดอันดับ 3 บน Arena AI leaderboard เอาชนะคู่แข่งที่ใหญ่กว่า 20 เท่า 26B MoE อยู่ในอันดับ 6 ทั้งสองรันบน GPU 80GB เดียว ส่วน E2B/E4B ซึ่งเบากว่า สามารถรันออฟไลน์บนมือถือหรือ edge device ได้&lt;/p&gt;

&lt;p&gt;สำหรับ dev API นี่คือจุดเปลี่ยน: Gemma 4 รองรับ function calling, structured JSON output และ context window 256K ในตัว ใช้งานจริงได้ในการสร้างเครื่องมือ API ด้วย AI ทั้งสร้าง test data, เขียน mocks, วิเคราะห์ API response&lt;/p&gt;

&lt;p&gt;💡หากคุณสร้างด้วย Gemma 4 และต้องการตรวจสอบ response ที่สร้างโดย AI กับ OpenAPI spec, Smart Mock ของ &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; สร้าง mock responses ตรง schema ได้อัตโนมัติ ไม่ต้องเขียน mock rule เลย Smart Mock อ่าน schema และสร้างข้อมูลที่เหมาะสมทันที ดาวน์โหลด Apidog ฟรีแล้วเชื่อมต่อ workflow Gemma 4 API ของคุณ&lt;/p&gt;

&lt;h2 id="gemma-4-คืออะไร-และมีอะไรใหม่"&gt;Gemma 4 คืออะไร และมีอะไรใหม่&lt;/h2&gt;

&lt;p&gt;Gemma 4 คือโอเพนซอร์ส LLM เจเนอเรชัน 4 ของ Google DeepMind “Gemma” แปลว่าอัญมณีในภาษาละติน เปิดตัวต้น 2024 นักพัฒนาดาวน์โหลดไปกว่า 400 ล้านครั้ง มี community “Gemmaverse” สร้างรูปแบบโมเดลหลากหลายกว่า 100,000 รายการ&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-52.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-52.png" alt="แผนภูมิแสดงช่วงเวลาการพัฒนา Gemma" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gemma 4 เปิดตัวภายใต้ &lt;a href="https://goo.gle/gemma-4-apache-2" rel="noopener noreferrer"&gt;Apache 2.0 license&lt;/a&gt; แตกต่างจากเวอร์ชันก่อนที่ใช้ custom usage term คุณสามารถใช้ ปรับแต่ง และนำไปใช้เชิงพาณิชย์ได้เต็มที่ เหมาะกับองค์กรหรือ startup ที่ต้องการควบคุม AI infra&lt;/p&gt;

&lt;p&gt;จุดเด่นหลัก Gemma 4 คือ “intelligence-per-parameter” 31B Dense มีความสามารถสูงแต่ใช้ compute ต่ำกว่า GPT-4 หรือ Claude 3 Sonnet มาก บน Arena AI (เม.ย. 2026) Gemma 4 31B ดีกว่าโมเดล 600B parameter&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-51.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-51.png" alt="แผนภูมิเปรียบเทียบประสิทธิภาพของ Gemma 4" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ความใหม่เมื่อเทียบกับ Gemma 3:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;อินพุต Multimodal (ดั้งเดิม):&lt;/strong&gt; ประมวลผลภาพ/วิดีโอในตัว Edge E2B/E4B เพิ่ม input เสียง (voice) สำหรับ speech recognition (Gemma 3 ไม่มี)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context Window ยาวขึ้น:&lt;/strong&gt; E2B/E4B รองรับ 128K token, 26B/31B รองรับ 256K เพียงพอสำหรับส่ง codebase ทั้ง repo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agentic Workflow Support:&lt;/strong&gt; มี function calling, native JSON output, system instructions สร้าง agent ที่เรียก API, parse response, chain action ได้จริง&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced Reasoning:&lt;/strong&gt; 31B ดีขึ้นมากด้าน math และ multi-step instruction เหมาะสำหรับสร้าง API test ที่ต้องเข้าใจ endpoint/schema relationship&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;รองรับกว่า 140 ภาษา:&lt;/strong&gt; Pretrain มากกว่า 140 ภาษาโดยกำเนิด ไม่ใช่แค่ fine-tune จากอังกฤษ ใช้งานกับ API ทั่วโลกได้ทันที&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apache 2.0 License:&lt;/strong&gt; ไม่มี legal ambiguity ใช้งานเชิงพาณิชย์ได้เต็มที่&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="gemma-4-รุ่นย่อยและความสามารถ"&gt;Gemma 4 รุ่นย่อยและความสามารถ&lt;/h2&gt;

&lt;p&gt;Google เปิดตัว Gemma 4 สี่ขนาด เจาะกลุ่มฮาร์ดแวร์ต่างกัน:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;โมเดล&lt;/th&gt;
&lt;th&gt;พารามิเตอร์&lt;/th&gt;
&lt;th&gt;พารามิเตอร์ที่ทำงานอยู่ (การอนุมาน)&lt;/th&gt;
&lt;th&gt;บริบท&lt;/th&gt;
&lt;th&gt;เหมาะที่สุดสำหรับ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;E2B&lt;/td&gt;
&lt;td&gt;2B ที่มีประสิทธิภาพ&lt;/td&gt;
&lt;td&gt;~2B&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;มือถือ, IoT, Edge ออฟไลน์&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E4B&lt;/td&gt;
&lt;td&gt;4B ที่มีประสิทธิภาพ&lt;/td&gt;
&lt;td&gt;~4B&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;โทรศัพท์, Raspberry Pi, Jetson Orin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26B MoE&lt;/td&gt;
&lt;td&gt;26B รวม&lt;/td&gt;
&lt;td&gt;~3.8B&lt;/td&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;td&gt;เซิร์ฟเวอร์ latency ต่ำ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;31B Dense&lt;/td&gt;
&lt;td&gt;31B&lt;/td&gt;
&lt;td&gt;31B&lt;/td&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;td&gt;คุณภาพสูงสุด, วิจัย, Fine-tune&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;E2B/E4B ใช้ Mixture of Experts (MoE) เปิดใช้งาน parameter แค่บางส่วนต่อ token ประหยัด battery/RAM เหมาะกับ edge Google ร่วมมือ Qualcomm และ MediaTek, รันออฟไลน์บน Android ผ่าน AICore Dev Preview&lt;/p&gt;

&lt;p&gt;26B MoE ใช้งานจริงแค่ 3.8B parameter inference, latency ต่ำ เหมาะกับ server-side&lt;/p&gt;

&lt;p&gt;31B Dense คือผู้นำด้านคุณภาพ เหมาะกับ fine-tuning งานเฉพาะ หรือต้องการ structured JSON output ที่ซับซ้อน&lt;/p&gt;

&lt;p&gt;ทั้งสี่รุ่นมี instruction-tuned (IT) และ base forms&lt;/p&gt;

&lt;p&gt;สำหรับ API: 26B MoE สมดุล speed/quality, 31B Dense สำหรับ structured JSON และ multi-step logic&lt;/p&gt;

&lt;p&gt;ทุกรุ่นรองรับ function calling และ JSON output mode เหมาะกับ dev API&lt;/p&gt;

&lt;h2 id="การตั้งค่า-gemma-4-api-ทีละขั้นตอน"&gt;การตั้งค่า Gemma 4 API: ทีละขั้นตอน&lt;/h2&gt;

&lt;p&gt;มี 3 ทางเลือกหลักในการใช้งาน Gemma 4: Google AI Studio (เร็ว), Vertex AI (องค์กร), หรือรันโลคัลด้วย Ollama/vLLM&lt;/p&gt;

&lt;h3 id="ตัวเลือกที่-1-google-ai-studio-แนะนำสำหรับการทำโปรโตไทป์"&gt;ตัวเลือกที่ 1: Google AI Studio (แนะนำสำหรับโปรโตไทป์)&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;ไปที่ &lt;a href="https://aistudio.google.com" rel="noopener noreferrer"&gt;Google AI Studio&lt;/a&gt; สร้างบัญชีฟรี แล้วสร้าง API key&lt;/li&gt;
&lt;li&gt;ติดตั้ง SDK:
&lt;pre&gt;&lt;code&gt;pip install google-genai
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;ตัวอย่างเรียกใช้งาน:
&lt;pre&gt;&lt;code&gt;import google.generativeai as genai

genai.configure(api_key="YOUR_API_KEY")

model = genai.GenerativeModel("gemma-4-31b-it")

response = model.generate_content(
    "สร้างอ็อบเจกต์ JSON สำหรับบัญชีผู้ใช้ที่มีฟิลด์ id, email และ created_at"
)

print(response.text)
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Structured JSON output:
&lt;pre&gt;&lt;code&gt;import google.generativeai as genai
import json

genai.configure(api_key="YOUR_API_KEY")

model = genai.GenerativeModel(
    "gemma-4-31b-it",
    generation_config={"response_mime_type": "application/json"}
)

prompt = """
สร้าง 3 อ็อบเจกต์ผู้ใช้ตัวอย่างสำหรับ API อีคอมเมิร์ซ
ผู้ใช้แต่ละคนควรมี: id (จำนวนเต็ม), email (สตริง), username (สตริง),
created_at (การประทับเวลา ISO 8601), และ subscription_tier (free|pro|enterprise)
ส่งคืนเป็นอาร์เรย์ JSON
"""

response = model.generate_content(prompt)
users = json.loads(response.text)
print(json.dumps(users, indent=2))
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="ตัวเลือกที่-2-การปรับใช้งานแบบโลคัลด้วย-ollama"&gt;ตัวเลือกที่ 2: การปรับใช้งานแบบโลคัลด้วย Ollama&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;ติดตั้ง Ollama จาก &lt;a href="https://ollama.com" rel="noopener noreferrer"&gt;ollama.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ดึงโมเดล:
&lt;pre&gt;&lt;code&gt;ollama pull gemma4
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;รันเซิร์ฟเวอร์:
&lt;pre&gt;&lt;code&gt;ollama serve
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;ใช้ API แบบ OpenAI-compatible:
&lt;pre&gt;&lt;code&gt;import requests
import json

response = requests.post(
    "http://localhost:11434/api/chat",
    json={
        "model": "gemma4",
        "messages": [
            {
                "role": "user",
                "content": "สร้างการตอบกลับ JSON ที่ถูกต้องสำหรับ REST API /products endpoint. รวมถึงฟิลด์ id, name, price และ stock."
            }
        ],
        "stream": False
    }
)

result = response.json()
print(result["message"]["content"])
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="ตัวเลือกที่-3-การเรียกใช้ฟังก์ชันสำหรับการจัดการ-api"&gt;ตัวเลือกที่ 3: การเรียกใช้ฟังก์ชัน (Function Calling) สำหรับ API&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Gemma 4 รองรับ function calling กำหนด function schema แล้วให้โมเดลเรียกใช้
&lt;pre&gt;&lt;code&gt;import google.generativeai as genai

genai.configure(api_key="YOUR_API_KEY")

tools = [
    {
        "function_declarations": [
            {
                "name": "get_api_schema",
                "description": "เรียกดู OpenAPI schema สำหรับเส้นทาง endpoint ที่กำหนด",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "endpoint_path": {
                            "type": "string",
                            "description": "เส้นทาง endpoint ของ API เช่น /users/{id}"
                        },
                        "method": {
                            "type": "string",
                            "enum": ["GET", "POST", "PUT", "DELETE", "PATCH"]
                        }
                    },
                    "required": ["endpoint_path", "method"]
                }
            }
        ]
    }
]

model = genai.GenerativeModel("gemma-4-31b-it", tools=tools)

response = model.generate_content(
    "ฉันต้องการทดสอบ GET /users/{id} endpoint Schema ที่การตอบกลับควรเป็นไปตามนั้นคืออะไร?"
)

if response.candidates[0].content.parts[0].function_call:
    fc = response.candidates[0].content.parts[0].function_call
    print(f"โมเดลเรียกใช้ฟังก์ชัน: {fc.name}")
    print(f"พร้อมอาร์กิวเมนต์: {dict(fc.args)}")
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;สามารถสร้าง agentic test pipeline สำหรับ API ได้จริง&lt;/p&gt;

&lt;h2 id="การสร้าง-api-mocks-ที่ขับเคลื่อนด้วย-ai-ด้วย-gemma-4"&gt;การสร้าง API mocks ที่ขับเคลื่อนด้วย AI ด้วย Gemma 4&lt;/h2&gt;

&lt;p&gt;Gemma 4 เหมาะกับการสร้าง mock data สำหรับ dev API ตัวอย่าง: สร้าง mock response จาก OpenAPI schema&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;import google.generativeai as genai
import json

genai.configure(api_key="YOUR_API_KEY")

model = genai.GenerativeModel(
    "gemma-4-31b-it",
    generation_config={"response_mime_type": "application/json"}
)

schema = {
    "type": "object",
    "properties": {
        "id": {"type": "integer"},
        "order_number": {"type": "string", "pattern": "^ORD-[0-9]{6}$"},
        "status": {"type": "string", "enum": ["pending", "shipped", "delivered", "cancelled"]},
        "total": {"type": "number", "minimum": 0},
        "items": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "product_id": {"type": "integer"},
                    "quantity": {"type": "integer", "minimum": 1},
                    "unit_price": {"type": "number"}
                }
            }
        },
        "created_at": {"type": "string", "format": "date-time"}
    }
}

prompt = f"""
สร้าง 5 การตอบกลับจำลองที่สมจริงสำหรับ API การจัดการคำสั่งซื้อ
การตอบกลับแต่ละครั้งต้องเป็นไปตาม JSON Schema นี้อย่างเคร่งครัด:
{json.dumps(schema, indent=2)}

ทำให้ข้อมูลสมจริง: ใช้ราคาที่สมจริง, product IDs และสถานะที่หลากหลาย
ส่งคืนเป็นอาร์เรย์ JSON ของอ็อบเจกต์คำสั่งซื้อ 5 รายการ
"""

response = model.generate_content(prompt)
mock_orders = json.loads(response.text)
print(json.dumps(mock_orders, indent=2))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Gemma 4 เข้าใจ enum, string pattern, range ของ schema จริงๆ ได้ mock data ตรง schema ไม่ใช่แค่ string สุ่ม&lt;/p&gt;

&lt;p&gt;ขยายได้กับ endpoint ไหนก็ได้ ป้อน schema response จาก OpenAPI ของคุณ Gemma 4 สร้าง test data ที่ตรง&lt;/p&gt;

&lt;p&gt;ถ้าต้องการ conditional mock responses (เช่น ถ้ามี user ID ให้ส่ง error response) ใช้ context window 256K ที่ยาว: ป้อน OpenAPI spec ทั้งหมดใน prompt แล้วขอ mock หลาย endpoint พร้อมกัน&lt;/p&gt;

&lt;p&gt;เวิร์กโฟลว์ที่แนะนำ: ส่งออก Apidog collection เป็น OpenAPI spec, วางใน prompt แล้วขอให้ Gemma 4 สร้าง test case สมจริงต่อ endpoint ได้ทันที&lt;/p&gt;

&lt;h2 id="การทดสอบการตอบกลับ-api-ของ-gemma-4-ด้วย-apidog"&gt;การทดสอบการตอบกลับ API ของ Gemma 4 ด้วย Apidog&lt;/h2&gt;

&lt;p&gt;เมื่อใช้ Gemma 4 สร้างข้อมูลหรือเป็นส่วนหนึ่งของ API pipeline ต้องตรวจสอบ response ว่าตรง schema หรือไม่ ใช้ Test Scenarios ของ &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-53.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-53.png" alt="ภาพหน้าจอของ Apidog Test Scenario" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Workflow ที่แนะนำ:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;นำเข้า Gemma 4 API endpoint เข้า Apidog&lt;/strong&gt;
สร้าง endpoint ใหม่ใน Apidog ตั้งค่า URL เป็น API wrapper Gemma 4 หรือชี้ไปยัง Google AI Studio endpoint กำหนด response schema ที่ต้องการ&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ใช้ Smart Mock สร้าง prototype response&lt;/strong&gt;
ก่อนรันทดสอบจริง ใช้ Smart Mock ของ Apidog สร้าง mock response จาก schema ให้ทันที ฟิลด์ &lt;code&gt;email&lt;/code&gt; จะถูก mock เป็น email จริง &lt;code&gt;created_at&lt;/code&gt; จะเป็น timestamp อัตโนมัติ&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-54.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-54.png" alt="ภาพหน้าจอของ Apidog Smart Mock" width="800" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Smart Mock มีลำดับชั้น: custom mock ก่อน, ตามชื่อ property, ตาม schema default คุณ override เฉพาะฟิลด์สำคัญแล้วปล่อยให้ engine จัดการส่วนที่เหลือ&lt;/p&gt;

&lt;ol start="3"&gt;
&lt;li&gt;
&lt;strong&gt;สร้าง Test Scenario สำหรับ Gemma 4 pipeline&lt;/strong&gt;
ในโมดูล Tests ของ Apidog สร้าง Test Scenario ใหม่ เพิ่มการเรียก Gemma 4 API เป็นขั้นตอนแรก จากนั้น assertion ตรวจสอบ response&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ตั้งค่า assertions&lt;/strong&gt;
ตรวจสอบ status code, header, ฟิลด์ JSON ใน response Gemma 4 มักจะยืนยัน &lt;code&gt;candidates[0].content.parts[0].text&lt;/code&gt; ว่าตรง schema ที่กำหนด&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data-driven testing&lt;/strong&gt;
Apidog รองรับ CSV/JSON data file คุณเตรียม prompt หลากหลาย 50 แบบใน CSV แล้วรันทดสอบทั้งหมดได้ในคลิกเดียว ทดสอบ Gemma 4 กับ input หลากหลายได้จริง&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ตั้งแต่ define schema ถึง execute test ใช้เวลาประมาณ 15 นาที หลังจากนั้นรันผ่าน Apidog CLI ใน CI/CD ได้เลย&lt;/p&gt;

&lt;h2 id="กรณีการใช้งานจริง"&gt;กรณีการใช้งานจริง&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;สร้างข้อมูลทดสอบ API:&lt;/strong&gt; ใช้ Gemma 4 + OpenAPI schema สร้าง test fixture หลายร้อย record ในไม่กี่นาที ป้อน schema ระบุ edge cases โมเดลสร้างข้อมูลให้&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart API mocking:&lt;/strong&gt; Mock แบบดั้งเดิมคือข้อมูลคงที่ Gemma 4 สร้าง context-aware mock ได้ เช่น API ค้นหาสินค้าส่งคืนสินค้าไม่ซ้ำตาม query โดยไม่ต้อง hardcode ทุกกรณี&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;สร้างเอกสาร API:&lt;/strong&gt; ป้อน codebase ทั้งหมดใน context window 256K ขอให้ Gemma 4 สร้าง OpenAPI doc สำหรับ endpoint ที่ไม่มีเอกสาร Function calling ช่วยให้สร้าง agent เขียน spec อัตโนมัติ&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API schema validation:&lt;/strong&gt; ใช้ Gemma 4 วิเคราะห์ API response ตรวจ schema violation ช่วยตรวจจับ missing field, type ผิด, enum ไม่ตรง ดีกว่า JSON Schema validator ทั่วไป&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;เขียน regression test อัตโนมัติ:&lt;/strong&gt; ป้อน API spec และ bug report ขอให้ Gemma 4 เขียน test case ตรวจแต่ละ bug เข้าใจ schema relationship สร้าง test ที่ซับซ้อนได้&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="gemma-4-เทียบกับโมเดลโอเพนซอร์สอื่นๆ-สำหรับการใช้งาน-api"&gt;Gemma 4 เทียบกับโอเพนซอร์สอื่นๆ สำหรับ API&lt;/h2&gt;

&lt;p&gt;เปรียบเทียบกับโมเดลโอเพนซอร์สชั้นนำอื่นๆ สำหรับงาน API&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;โมเดล&lt;/th&gt;
&lt;th&gt;พารามิเตอร์&lt;/th&gt;
&lt;th&gt;บริบท&lt;/th&gt;
&lt;th&gt;เอาต์พุต JSON&lt;/th&gt;
&lt;th&gt;การเรียกใช้ฟังก์ชัน&lt;/th&gt;
&lt;th&gt;ใบอนุญาต&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Gemma 4 31B&lt;/td&gt;
&lt;td&gt;31B&lt;/td&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemma 4 26B MoE&lt;/td&gt;
&lt;td&gt;26B (3.8B ที่ทำงานอยู่)&lt;/td&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Llama 3.3 70B&lt;/td&gt;
&lt;td&gt;70B&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;ผ่านพรอมต์&lt;/td&gt;
&lt;td&gt;ผ่านพรอมต์&lt;/td&gt;
&lt;td&gt;Llama Community&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mistral 7B&lt;/td&gt;
&lt;td&gt;7B&lt;/td&gt;
&lt;td&gt;32K&lt;/td&gt;
&lt;td&gt;ผ่านพรอมต์&lt;/td&gt;
&lt;td&gt;จำกัด&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen 2.5 72B&lt;/td&gt;
&lt;td&gt;72B&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Gemma 4 31B/26B เด่นที่ native JSON output, function calling, context window ยาว&lt;/p&gt;

&lt;p&gt;Llama 3.3 70B แข็งแกร่งแต่ต้องใช้ compute มากกว่า Gemma 4 31B ถึงสองเท่า และ Gemma 4 31B อยู่สูงกว่าใน Arena AI leaderboard แม้ขนาดเล็กกว่า&lt;/p&gt;

&lt;p&gt;Mistral 7B ไวแต่ context window สั้น (32K) ขาด native JSON/function calling&lt;/p&gt;

&lt;p&gt;Qwen 2.5 72B มีความสามารถ API tool เทียบเท่า Gemma 4 แต่ต้องการฮาร์ดแวร์ระดับสูงกว่า&lt;/p&gt;

&lt;p&gt;Gemma 4 ได้เปรียบด้าน Apache 2.0 license (Llama มีข้อจำกัด commercial use)&lt;/p&gt;

&lt;p&gt;สรุป: สำหรับ dev API ส่วนใหญ่ เริ่มที่ Gemma 4 26B MoE (latency ต่ำ) หรือ 31B (คุณภาพสูงสุด)&lt;/p&gt;

&lt;h2 id="บทสรุป"&gt;บทสรุป&lt;/h2&gt;

&lt;p&gt;Gemma 4 คือทางเลือกโอเพนซอร์สที่เหมาะสำหรับ API AI development ใบอนุญาต Apache 2.0 ทำให้ใช้ใน production/commercial ได้จริง รองรับ function calling และ JSON output ในตัว ไม่ต้อง prompt engineering เยอะ&lt;/p&gt;

&lt;p&gt;ทั้ง 4 ขนาดครอบคลุมตั้งแต่มือถือถึง workstation 26B MoE คือจุด sweet spot สำหรับ dev API ส่วนใหญ่: คุณภาพใกล้เคียง LLM ชั้นนำ แต่ inference cost ต่ำ&lt;/p&gt;

&lt;p&gt;จับคู่ Gemma 4 กับ &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; เพื่อ workflow การสร้าง/ตรวจสอบ API ด้วย AI ใช้ Gemma 4 สร้าง test data, mock response ใช้ Smart Mock สร้าง prototype schema ใช้ Test Scenarios ตรวจสอบ output ว่าตรง API contract จริง&lt;/p&gt;

&lt;h2 id="คำถามที่พบบ่อย"&gt;คำถามที่พบบ่อย&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 คืออะไร?&lt;/strong&gt; โมเดลภาษาโอเพนซอร์ส 4 ขนาดล่าสุดของ Google DeepMind เปิดตัว เม.ย. 2026 (E2B, E4B, 26B MoE, 31B Dense) Apache 2.0 31B Dense อยู่อันดับ 3 Arena AI leaderboard&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 ใช้งานฟรีหรือไม่?&lt;/strong&gt; ดาวน์โหลดน้ำหนักโมเดลใช้ฟรีตาม Apache 2.0 ใช้ compute เองเสียเฉพาะค่า hardware ถ้าใช้ Google AI Studio มี free tier (จำกัด rate) Vertex AI คิดตาม usage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 ส่งออก structured JSON ได้หรือไม่?&lt;/strong&gt; ได้ รองรับ &lt;code&gt;response_mime_type: "application/json"&lt;/code&gt; ใน Google Generative AI SDK บังคับให้ส่ง JSON ที่ parse ได้ทุกครั้ง&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 เทียบกับ GPT-4o สำหรับ dev API ยังไง?&lt;/strong&gt; GPT-4o เป็น proprietary, ไม่มี local deploy, ค่าใช้จ่าย API สูงกว่า Gemma 4 31B deploy local ฟรี คะแนน benchmark สูสี ถ้าต้องการ privacy/cost control Gemma 4 น่าสนใจ&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fine-tune Gemma 4 ด้วย API data ตัวเองได้หรือไม่?&lt;/strong&gt; ได้ Fine-tune ผ่าน Google AI Studio, Vertex AI, หรือ Hugging Face TRL Fine-tune schema/response pattern เฉพาะ domain เพื่อ output คุณภาพสูงขึ้น&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ฮาร์ดแวร์ที่ต้องใช้รัน Gemma 4 local?&lt;/strong&gt; 31B/26B ใส่ใน NVIDIA H100 80GB (bfloat16) เวอร์ชัน quantized รันบน consumer GPU VRAM 16-24GB E4B/E2B รันบนโทรศัพท์/Edge/Raspberry Pi/NVIDIA Jetson&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 รองรับ function calling หรือไม่?&lt;/strong&gt; รองรับ ทุกรุ่น ใช้ JSON object กำหนด function schema ชื่อ/คำอธิบาย/parameter schema โมเดลตัดสินใจเรียก function และส่ง argument ที่ structured&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ทดสอบ response Gemma 4 API อัตโนมัติได้ไหม?&lt;/strong&gt; ใช้ Test Scenarios ของ &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; สร้าง workflow test แบบ chain request/assertion รัน local ผ่าน CLI หรือใน CI/CD ทุก commit&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Qwen3.6-Plus API: ชนะ Claude บน Terminal Benchmarks</title>
      <dc:creator>Thanawat Wongchai</dc:creator>
      <pubDate>Thu, 02 Apr 2026 09:38:01 +0000</pubDate>
      <link>https://dev.to/thanawat_wonchai/qwen36-plus-api-chna-claude-bn-terminal-benchmarks-4p56</link>
      <guid>https://dev.to/thanawat_wonchai/qwen36-plus-api-chna-claude-bn-terminal-benchmarks-4p56</guid>
      <description>&lt;h2&gt;
  
  
  สรุป (TL;DR)
&lt;/h2&gt;

&lt;p&gt;Qwen3.6-Plus เปิดตัวอย่างเป็นทางการแล้ว คะแนนสูงใน SWE-bench Verified 78.8% และ Terminal-Bench 2.0 ที่ 61.6% (สูงกว่า Claude Opus 4.5) พร้อม Context Window 1M โทเค็น มีพารามิเตอร์ใหม่ &lt;code&gt;preserve_thinking&lt;/code&gt; สำหรับ Agent Loops และใช้งานกับ Claude Code, OpenClaw และ Qwen Code ได้โดยตรงผ่าน API ที่เข้ากันได้กับ OpenAI&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;ทดลองใช้ Apidog วันนี้&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  จากการพรีวิวสู่การเปิดตัว
&lt;/h2&gt;

&lt;p&gt;หากคุณเคยอ่าน &lt;a href="http://apidog.com/blog/qwen-3-6-free-openrouter/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;คู่มือ Qwen 3.6 Plus Preview บน OpenRouter&lt;/a&gt; จะทราบถึงความสามารถของโมเดลนี้ รุ่นพรีวิวเปิดตัวเมื่อ 30 มีนาคม ประมวลผลโทเค็นไปกว่า 400 ล้านโทเค็นใน 2 วันแรก&lt;/p&gt;

&lt;p&gt;ตอนนี้ Qwen3.6-Plus เปิดตัวอย่างเป็นทางการแล้ว ใช้งานได้ผ่าน Alibaba Cloud Model Studio มี API ที่เสถียร, uptime การันตี และพารามิเตอร์ใหม่ที่เหมาะกับงาน Agent หลายขั้นตอน&lt;/p&gt;

&lt;p&gt;บทความนี้สรุปของใหม่ วิธีเรียก API อย่างถูกต้อง และวิธีทดสอบการผสานกับ Apidog ก่อนนำไปใช้จริง&lt;/p&gt;

&lt;h2&gt;
  
  
  Qwen3.6-Plus คืออะไร
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://qwen.ai/blog?id=qwen3.6" rel="noopener noreferrer"&gt;Qwen3.6-Plus&lt;/a&gt; เป็นโมเดล Mixture-of-Experts จากทีม Qwen ของ Alibaba ใช้ Sparse Activation (มีแค่บางส่วนของพารามิเตอร์ทำงานแต่ละโทเค็น) ช่วยให้มีประสิทธิภาพสูงแต่ต้นทุนต่ำกว่ารุ่น Dense&lt;/p&gt;

&lt;p&gt;ฟีเจอร์หลัก:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Context Window 1M โทเค็น&lt;/li&gt;
&lt;li&gt;Reasoning แบบ Chain-of-thought (บังคับใช้)&lt;/li&gt;
&lt;li&gt;พารามิเตอร์ &lt;code&gt;preserve_thinking&lt;/code&gt; สำหรับ Agent&lt;/li&gt;
&lt;li&gt;รองรับ Multimodal (ภาพ, วิดีโอ, เอกสาร)&lt;/li&gt;
&lt;li&gt;API compatible กับ OpenAI, Anthropic และ OpenAI Responses API&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;เวอร์ชัน Open-source ขนาดเล็กจะเปิดตัวเร็วๆ นี้ หากต้องการ Weights สำหรับ self-hosted ให้ติดตามข่าว&lt;/p&gt;

&lt;h2&gt;
  
  
  ผลลัพธ์ Benchmark
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Coding Agents
&lt;/h3&gt;

&lt;p&gt;Qwen3.6-Plus ตามหลัง Claude Opus 4.5 เพียงเล็กน้อยใน SWE-bench ส่วนใหญ่ แต่เป็นผู้นำทุกโมเดลใน Terminal-Bench&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F56nehdw7rei6u9ghff6v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F56nehdw7rei6u9ghff6v.png" alt="Terminal-Bench 2.0" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Terminal-Bench 2.0 ทดสอบ shell จริง เช่น การจัดการไฟล์ การควบคุมกระบวนการ และเวิร์กโฟลว์หลายขั้นตอน Qwen3.6-Plus ได้ 61.6% vs Claude Opus 59.3% เหนือกว่าอย่างชัดเจนในงานที่ developer ใช้งานจริง&lt;/p&gt;

&lt;h3&gt;
  
  
  General Agents และการใช้เครื่องมือ
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;Claude Opus 4.5&lt;/th&gt;
&lt;th&gt;Qwen3.6-Plus&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TAU3-Bench&lt;/td&gt;
&lt;td&gt;70.2%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;70.7%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepPlanning&lt;/td&gt;
&lt;td&gt;33.9%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;41.5%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCPMark&lt;/td&gt;
&lt;td&gt;42.3%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;48.2%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP-Atlas&lt;/td&gt;
&lt;td&gt;71.8%&lt;/td&gt;
&lt;td&gt;74.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WideSearch&lt;/td&gt;
&lt;td&gt;76.4%&lt;/td&gt;
&lt;td&gt;74.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;MCPMark ทดสอบการใช้เครื่องมือ GitHub MCP โดดเด่นที่ 48.2% DeepPlanning ที่ 41.5% เทียบกับ 33.9% ของ Claude แสดงความต่างในงานวางแผนยาว&lt;/p&gt;

&lt;h3&gt;
  
  
  การใช้เหตุผลและความรู้
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;Claude Opus 4.5&lt;/th&gt;
&lt;th&gt;Qwen3.6-Plus&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPQA&lt;/td&gt;
&lt;td&gt;87.0%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;90.4%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LiveCodeBench v6&lt;/td&gt;
&lt;td&gt;84.8%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;87.1%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IFEval strict&lt;/td&gt;
&lt;td&gt;90.9%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;94.3%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MMLU-Pro&lt;/td&gt;
&lt;td&gt;89.5%&lt;/td&gt;
&lt;td&gt;88.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;GPQA และ IFEval strict - Qwen3.6-Plus เป็นผู้นำ เหมาะกับ output มีโครงสร้างและงาน Agent ที่ต้องปฏิบัติตามข้อจำกัด&lt;/p&gt;

&lt;h3&gt;
  
  
  Multimodal
&lt;/h3&gt;

&lt;p&gt;Qwen3.6-Plus เป็นโมเดล Multimodal แบบเนทีฟ นำหน้าในงานเอกสาร, spatial reasoning, object detection&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;Qwen3.6-Plus&lt;/th&gt;
&lt;th&gt;หมายเหตุ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OmniDocBench 1.5&lt;/td&gt;
&lt;td&gt;91.2%&lt;/td&gt;
&lt;td&gt;อันดับสูงสุด&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RefCOCO avg&lt;/td&gt;
&lt;td&gt;93.5%&lt;/td&gt;
&lt;td&gt;อันดับสูงสุด&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;We-Math&lt;/td&gt;
&lt;td&gt;89.0%&lt;/td&gt;
&lt;td&gt;อันดับสูงสุด&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CountBench&lt;/td&gt;
&lt;td&gt;97.6%&lt;/td&gt;
&lt;td&gt;อันดับสูงสุด&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OSWorld-Verified&lt;/td&gt;
&lt;td&gt;62.5%&lt;/td&gt;
&lt;td&gt;ตามหลัง Claude (66.3%)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;สำหรับงานเอกสารและ spatial Qwen3.6-Plus เป็นผู้นำ&lt;/p&gt;

&lt;h2&gt;
  
  
  วิธีเรียกใช้ API
&lt;/h2&gt;

&lt;p&gt;Qwen3.6-Plus มีบน Alibaba Cloud Model Studio รับ API key ได้ที่ modelstudio.alibabacloud.com&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Base URLs:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;สิงคโปร์: &lt;code&gt;https://dashscope-intl.aliyuncs.com/compatible-mode/v1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;ปักกิ่ง: &lt;code&gt;https://dashscope.aliyuncs.com/compatible-mode/v1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;สหรัฐอเมริกา เวอร์จิเนีย: &lt;code&gt;https://dashscope-us.aliyuncs.com/compatible-mode/v1&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  การเรียกใช้พื้นฐานพร้อม Streaming
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DASHSCOPE_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://dashscope-intl.aliyuncs.com/compatible-mode/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;completion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;qwen3.6-plus&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Review this Python function and find bugs.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
    &lt;span class="n"&gt;extra_body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enable_thinking&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;reasoning&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;
&lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;
&lt;span class="n"&gt;is_answering&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;completion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;continue&lt;/span&gt;
    &lt;span class="n"&gt;delta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;hasattr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;reasoning_content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reasoning_content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;is_answering&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;reasoning&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reasoning_content&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;is_answering&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;is_answering&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
        &lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flush&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  พารามิเตอร์ preserve_thinking
&lt;/h3&gt;

&lt;p&gt;ตั้งค่า &lt;code&gt;preserve_thinking: true&lt;/code&gt; เพื่อให้โมเดลคง Chain-of-Thought จากทุกรอบก่อนหน้า เหมาะกับ Agent Loops หลายขั้นตอน (ปิดไว้โดย default เพื่อประหยัดโทเค็น)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;completion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;qwen3.6-plus&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;conversation_history&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;extra_body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enable_thinking&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;preserve_thinking&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# รักษา reasoning ทุกรอบ
&lt;/span&gt;    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ใช้ Qwen3.6-Plus กับ Claude Code
&lt;/h3&gt;

&lt;p&gt;Qwen API รองรับโปรโตคอล Anthropic แค่เปลี่ยน ENV ก็ใช้งาน Claude Code กับ Qwen3.6-Plus ได้ทันที&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @anthropic-ai/claude-code

&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"qwen3.6-plus"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_SMALL_FAST_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"qwen3.6-plus"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_BASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;https://dashscope-intl.aliyuncs.com/apps/anthropic
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_AUTH_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_dashscope_api_key

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  ใช้ Qwen3.6-Plus กับ OpenClaw
&lt;/h3&gt;

&lt;p&gt;OpenClaw (เดิม Moltbot / Clawdbot) เป็น Agent เขียนโค้ดแบบ self-hosted&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# ติดตั้ง (Node.js 22+)&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://molt.bot/install.sh | bash

&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;DASHSCOPE_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_key
openclaw dashboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;แก้ไข &lt;code&gt;~/.openclaw/openclaw.json&lt;/code&gt; เพิ่มฟิลด์ด้านล่าง:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"models"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"providers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"alibaba-coding-plan"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"baseUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://coding-intl.dashscope.aliyuncs.com/v1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"apiKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${DASHSCOPE_API_KEY}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"models"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"qwen3.6-plus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"reasoning"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"agents"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"models"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"qwen3.6-plus"&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ใช้ Qwen3.6-Plus กับ Qwen Code
&lt;/h3&gt;

&lt;p&gt;Qwen Code เป็น Agent เทอร์มินัลแบบ Open-source จาก Alibaba ใช้ API ฟรี 1,000 ครั้ง/วันหลัง sign-in&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @qwen-code/qwen-code@latest
qwen
&lt;span class="c"&gt;# พิมพ์ /auth เพื่อลงชื่อเข้าใช้และเปิดใช้งาน Free Tier&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  เหตุใด preserve_thinking จึงเปลี่ยนแปลงพฤติกรรมของ Agent
&lt;/h2&gt;

&lt;p&gt;API LLM ทั่วไปจะไม่คง reasoning ข้ามแต่ละรอบ ทำให้ Agent หลุดประเด็นเมื่อต้องทำหลาย step&lt;/p&gt;

&lt;p&gt;&lt;code&gt;preserve_thinking&lt;/code&gt; จะเก็บ chain-of-reasoning ข้ามรอบ Agent เหมาะกับงานที่ต้องใช้ context reasoning หลายขั้นตอน&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;conversation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;agent_step&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;preserve&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;user_message&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;qwen3.6-plus&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;extra_body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enable_thinking&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;preserve_thinking&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;preserve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;
    &lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;assistant&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;

&lt;span class="c1"&gt;# ตัวอย่าง: Agent ตรวจสอบโค้ดแบบหลายขั้นตอน
&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;agent_step&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Analyze the auth module for security issues.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;agent_step&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Now suggest fixes for the top 3 issues you found.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;agent_step&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Write tests that validate each fix.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ถ้าไม่มี &lt;code&gt;preserve_thinking&lt;/code&gt; โมเดลจะไม่รู้ว่าขั้นที่ 1 เจอปัญหาอะไร แต่เมื่อเปิด reasoning chain จะไม่หลุด context&lt;/p&gt;

&lt;h2&gt;
  
  
  เหมาะสำหรับอะไรมากที่สุด
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;การแก้ไขข้อบกพร่องระดับ Repository:&lt;/strong&gt; SWE-bench Verified 78.8% และ Pro 56.6%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ระบบอัตโนมัติสำหรับเทอร์มินัล:&lt;/strong&gt; นำใน Terminal-Bench 2.0&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;การเรียกใช้เครื่องมือ MCP:&lt;/strong&gt; MCPMark 48.2% (สูงสุด)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;การวิเคราะห์เอกสารแบบ Long-context:&lt;/strong&gt; Context Window 1M โทเค็น เหมาะกับ Codebase/Doc ขนาดใหญ่&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend code generation:&lt;/strong&gt; QwenWebBench 1501.7 คะแนน ใกล้เคียง Claude Opus 4.5&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;หลายภาษา (Multilingual):&lt;/strong&gt; WMT24++ 84.3%, MAXIFE 88.2% ครอบคลุม 23 ภาษา&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  การทดสอบการเรียกใช้ API ของ Qwen3.6-Plus ด้วย Apidog
&lt;/h2&gt;

&lt;p&gt;Endpoint เข้ากันได้กับ OpenAI สามารถนำเข้าไปใน &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; และทดสอบเหมือน API อื่นๆ&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3lln60azqwzlva81kvps.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3lln60azqwzlva81kvps.png" alt="Apidog test" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ตัวอย่างการตั้งค่า:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;URL: &lt;code&gt;https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Header: &lt;code&gt;Authorization: Bearer {{DASHSCOPE_API_KEY}}&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;ตัวอย่าง Assertion ใน Apidog:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Response contains choices&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;have&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;property&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;choices&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;a&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;and&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;not&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;empty&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;No empty reasoning when thinking enabled&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;choice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reasoning_content&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reasoning_content&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;not&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;empty&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ใช้ Smart Mock ของ Apidog เพื่อจำลอง response ระหว่างการพัฒนา ไม่ต้องเปลืองโทเค็นและทดสอบได้เร็ว&lt;/p&gt;

&lt;p&gt;ถ้าสร้าง Agent หลายรอบ ให้สร้าง Test Scenario เชื่อมโยงหลาย request ตรวจสอบว่า &lt;code&gt;preserve_thinking&lt;/code&gt; คง context reasoning ได้จริงก่อนนำไป production&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ดาวน์โหลด Apidog ฟรี&lt;/a&gt; เพื่อตั้งค่าการทดสอบนี้&lt;/p&gt;

&lt;h2&gt;
  
  
  มีอะไรกำลังจะมา
&lt;/h2&gt;

&lt;p&gt;ทีม Qwen เตรียมเปิดตัวเวอร์ชัน Open-source ขนาดเล็กในไม่กี่วัน (รูปแบบ Apache 2.0, Sparse MoE เหมือน Qwen3.5)&lt;/p&gt;

&lt;p&gt;Roadmap ที่จะตามมา:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;งานระดับ Repository กับไฟล์ขนาดใหญ่ขึ้น&lt;/li&gt;
&lt;li&gt;Agent แบบ Multimodal ที่ควบคุม GUI และ Visual Coding เป็นความสามารถหลัก&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;หาก Qwen3.6 เหมือน Qwen3.5 เวอร์ชัน Open-source จะกลายเป็นตัวเลือกหลักสำหรับ self-hosted coding agent เร็วๆ นี้&lt;/p&gt;

&lt;h2&gt;
  
  
  สรุป
&lt;/h2&gt;

&lt;p&gt;Qwen3.6-Plus ลดช่องว่างกับ Claude Opus 4.5 ในงานเขียนโค้ด นำในเทอร์มินัล, เครื่องมือ MCP, การวางแผนยาว Context Window 1M, Protocol Anthropic-compatible และ &lt;code&gt;preserve_thinking&lt;/code&gt; เหมาะกับ Agentic System พร้อมใช้งานจริง&lt;/p&gt;

&lt;p&gt;API อย่างเป็นทางการให้ความเสถียร SLA และฟีเจอร์ใหม่ที่เหมาะกับ Agent โดยเฉพาะ&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; ช่วยให้ทดสอบ API, Assertion, Mock และ Regression Test ได้สะดวกทุกครั้งที่อัปเดตโมเดลหรือ API&lt;/p&gt;

&lt;h2&gt;
  
  
  คำถามที่พบบ่อย
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Qwen3.6-Plus และเวอร์ชันพรีวิวแตกต่างกันอย่างไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
เวอร์ชันพรีวิว (qwen/qwen3.6-plus-preview) เปิดตัวบน OpenRouter เมื่อ 30 มี.ค. 2026 เวอร์ชันทางการเพิ่ม &lt;code&gt;preserve_thinking&lt;/code&gt;, SLA และรองรับ Model Studio เต็มรูปแบบ เวอร์ชัน Open-source เล็กกว่ากำลังจะมา&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;preserve_thinking&lt;/code&gt; คืออะไร และควรใช้เมื่อใด?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
โดยปกติ reasoning จะคงเฉพาะรอบปัจจุบัน ถ้าตั้งค่า &lt;code&gt;preserve_thinking: true&lt;/code&gt; reasoning chain จะคงข้ามรอบ ใช้กับ Agent Loops หลายขั้นตอนที่ต้องเห็น reasoning เก่าด้วย&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Qwen3.6-Plus เปรียบเทียบกับ Claude Opus 4.5 อย่างไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Claude Opus 4.5 นำใน SWE-bench Verified (80.9% vs 78.8%) และ OSWorld-Verified (66.3% vs 62.5%) แต่ Qwen3.6-Plus นำใน Terminal-Bench 2.0 (61.6% vs 59.3%), MCPMark (48.2% vs 42.3%), DeepPlanning (41.5% vs 33.9%) และ GPQA (90.4% vs 87.0%)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ฉันสามารถใช้ Qwen3.6-Plus กับ Claude Code ได้หรือไม่?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ได้ ตั้งค่า &lt;code&gt;ANTHROPIC_BASE_URL&lt;/code&gt; ไปยัง Dashscope Anthropic endpoint, &lt;code&gt;ANTHROPIC_MODEL&lt;/code&gt; เป็น &lt;code&gt;qwen3.6-plus&lt;/code&gt; และ &lt;code&gt;ANTHROPIC_AUTH_TOKEN&lt;/code&gt; เป็น Dashscope API key&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Qwen3.6-Plus เป็น Open Source หรือไม่?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
API โมเดลที่โฮสต์ไม่ใช่ Open-weight แต่เวอร์ชันเล็กกว่าและ Weights สาธารณะยืนยันแล้วว่าจะเปิดตัวเร็วๆ นี้&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ฉันจะเข้าถึงได้ฟรีได้อย่างไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ติดตั้ง Qwen Code (&lt;code&gt;npm install -g @qwen-code/qwen-code@latest&lt;/code&gt;), รัน &lt;code&gt;qwen&lt;/code&gt; แล้ว &lt;code&gt;/auth&lt;/code&gt; เพื่อ sign-in ด้วย Qwen Code OAuth รับสิทธิ์เรียก API ฟรี 1,000 ครั้ง/วัน&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;รองรับ Context Window ขนาดเท่าใด?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
1 ล้านโทเค็นเป็นค่าเริ่มต้น บาง benchmark ใช้ 256K เพื่อมาตรฐานเปรียบเทียบ แต่ API default คือ 1M&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ฉันจะทดสอบการผสาน API ก่อนปรับใช้งานจริงได้อย่างไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
นำเข้า Endpoint ไปยัง &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;, เพิ่ม API key เป็น env, เขียน Assertion และใช้ Smart Mock ระหว่างพัฒนา เชื่อมโยง request เป็น Test Scenario เพื่อตรวจสอบ Agent หลายรอบตั้งแต่ต้นจนจบ&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>news</category>
    </item>
    <item>
      <title>Holo3: สุดยอดโมเดลการใช้งานคอมพิวเตอร์?</title>
      <dc:creator>Thanawat Wongchai</dc:creator>
      <pubDate>Thu, 02 Apr 2026 08:57:54 +0000</pubDate>
      <link>https://dev.to/thanawat_wonchai/holo3-sudydomedlkaaraichngaankhmphiwetr-4in1</link>
      <guid>https://dev.to/thanawat_wonchai/holo3-sudydomedlkaaraichngaankhmphiwetr-4in1</guid>
      <description>&lt;h2&gt;
  
  
  สรุปโดยย่อ
&lt;/h2&gt;

&lt;p&gt;H Company เปิดตัว Holo3 เมื่อวันที่ 31 มีนาคม 2026 ซึ่งเป็นโมเดล Mixture-of-Experts ที่ทำคะแนนได้ 78.85% ใน OSWorld-Verified ซึ่งเป็นคะแนนสูงสุดเท่าที่เคยบันทึกไว้ในเกณฑ์มาตรฐานการใช้งานคอมพิวเตอร์เดสก์ท็อปชั้นนำ มันเอาชนะ GPT-5.4 และ Opus 4.6 ได้ในราคาที่ถูกกว่ามาก API พร้อมใช้งานแล้ว และรุ่น 35B เป็นแบบโอเพนเวทบน HuggingFace ภายใต้ใบอนุญาต Apache 2.0&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;ลองใช้ Apidog วันนี้&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  ช่องว่างในการใช้งานคอมพิวเตอร์ที่นักพัฒนาส่วนใหญ่ยังแก้ไม่ได้
&lt;/h2&gt;

&lt;p&gt;แม้คุณจะทำ API automation ไปแล้ว CI/CD pipeline ก็ราบรื่น แต่งานบางอย่างยังคงเป็นจุดอ่อนของระบบอัตโนมัติ เช่น ซอฟต์แวร์องค์กรเก่าที่ไม่มี API, แอปเดสก์ท็อปยุคก่อน REST, หรือเวิร์กโฟลว์หลายขั้นตอนที่ต้องข้าม UI หลายตัว&lt;/p&gt;

&lt;p&gt;RPA ดั้งเดิม (UiPath, Automation Anywhere) พึ่งพาสคริปต์พิกัดหน้าจอที่เปราะบางและมักเสียเมื่อ UI เปลี่ยน ทางเลือกคือการทำงานด้วยมือ&lt;/p&gt;

&lt;p&gt;AI สำหรับการใช้งานคอมพิวเตอร์เปลี่ยนสมการนี้ — โมเดลที่ "มอง" ภาพหน้าจอและสั่งคลิก, พิมพ์, เลื่อน สามารถนำทาง GUI ใดก็ได้โดยไม่ต้องมี API Holo3 จาก H Company คือโมเดลที่แข็งแกร่งที่สุดในสายนี้ ณ ปัจจุบัน&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 หากคุณสร้างเวิร์กโฟลว์อัตโนมัติหรือทดสอบ pipeline ที่เกี่ยวข้องกับซอฟต์แวร์เดสก์ท็อป API ของ Holo3 คือสิ่งที่ควรศึกษา และถ้าคุณใช้ &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; เพื่อออกแบบ/ทดสอบ API ด้านล่างนี้จะแสดงวิธีเชื่อมการเรียก Holo3 เข้ากับเวิร์กโฟลว์ของคุณอย่างละเอียด&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Holo3 คืออะไร?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://hcompany.ai/holo3" rel="noopener noreferrer"&gt;Holo3&lt;/a&gt; คือโมเดล AI สำหรับการใช้งานคอมพิวเตอร์: คุณส่งภาพหน้าจอของเดสก์ท็อปหรือเบราว์เซอร์, บอกงานที่ต้องการ, และโมเดลจะส่ง action (คลิก, กดแป้น, scroll) กลับมาให้ดำเนินการจริงบนหน้าจอ จับผลลัพธ์ ถ่ายภาพใหม่ วนลูปจนกว่างานเสร็จ&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3aoh5dvl0jtpi764v8qu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3aoh5dvl0jtpi764v8qu.png" alt="Holo3 Example" width="800" height="616"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;H Company มีสองรุ่นให้เลือก:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Holo3-122B-A10B&lt;/strong&gt; — เรือธง, 122B parameters, ใช้งานจริง 10B (MoE แบบ sparse) API โฮสต์ที่ hcompany.ai/holo-models-api เท่านั้น&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Holo3-35B-A3B&lt;/strong&gt; — 35B parameters, ใช้งานจริง 3B, โอเพนเวทบน &lt;a href="https://huggingface.co/Hcompany/Holo3-35B-A3B" rel="noopener noreferrer"&gt;HuggingFace&lt;/a&gt; (Apache 2.0), มีบริการฟรีบน inference API, ติดตั้งเองได้&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;สถาปัตยกรรม MoE (mixture of experts) ช่วยลดต้นทุน inference H Company ระบุว่า Holo3-122B-A10B มีค่าใช้จ่ายน้อยกว่า GPT-5.4 และ Opus 4.6 ต่อหนึ่งงาน&lt;/p&gt;

&lt;h2&gt;
  
  
  OSWorld-Verified: เกณฑ์มาตรฐานนี้วัดผลอะไรจริงๆ
&lt;/h2&gt;

&lt;p&gt;OSWorld-Verified เป็นเกณฑ์มาตรฐานชั้นนำสำหรับประเมิน AI การใช้งานคอมพิวเตอร์ เอเจนต์ต้องทำงานให้สำเร็จบนเครื่องจริง ผลลัพธ์ถูกตรวจสอบจากสถานะระบบจริงหลังจบงาน&lt;/p&gt;

&lt;p&gt;งานครอบคลุม:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;แอปเดียว (เปิดไฟล์, กรอกฟอร์ม, คัดลอกข้อมูล)&lt;/li&gt;
&lt;li&gt;เวิร์กโฟลว์ข้ามแอป (ดึง PDF, อัปเดตสเปรดชีต, ส่งอีเมล)&lt;/li&gt;
&lt;li&gt;ลำดับงาน multi-app ยาวๆ ที่ต้องการ reasoning ข้ามหลายระบบ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Holo3-122B-A10B ได้ &lt;strong&gt;78.85%&lt;/strong&gt; ใน OSWorld-Verified (โมเดลเดิมจาก Anthropic/OpenAI อยู่ที่ 60-65%)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F15te4auw5vh59u6lsyf9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F15te4auw5vh59u6lsyf9.png" alt="OSWorld Benchmark" width="800" height="631"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;H Company ยังระบุว่า Holo3 โดดเด่นในงาน multi-app ซึ่งต้องประสานข้อมูลข้ามหลายแอปพลิเคชัน&lt;/p&gt;

&lt;h2&gt;
  
  
  Holo3 ได้รับการฝึกฝนอย่างไร: Agentic Learning Flywheel
&lt;/h2&gt;

&lt;p&gt;H Company พัฒนา Holo3 ด้วยวงจรฝึกฝนต่อเนื่อง:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Synthetic Navigation Data&lt;/strong&gt; — สร้างตัวอย่างนำทางจากมนุษย์และ AI ตามสถานการณ์จริง&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Out-of-Domain Augmentation&lt;/strong&gt; — ขยายสถานการณ์เพื่อให้ครอบคลุม UI/edge case ที่ไม่คาดคิด&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Curated Reinforcement Learning&lt;/strong&gt; — คัดกรองแต่ละตัวอย่างแล้วนำไปใช้ใน RL pipeline เพื่อเพิ่มอัตราสำเร็จ&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ข้อมูลฝึกฝนมาจาก &lt;strong&gt;Synthetic Environment Factory&lt;/strong&gt; — ระบบที่ใช้เอเจนต์โค้ดสร้างแอปเว็บสมบูรณ์จากข้อกำหนด เพื่อให้โมเดลได้ฝึกบนเวิร์กโฟลว์ธุรกิจจริง&lt;/p&gt;

&lt;p&gt;ผลลัพธ์: Holo3 มีประสิทธิภาพเหนือกว่าโมเดล Qwen3.5 ที่มี parameter มากกว่า บ่งชี้ว่าวิธีการฝึกสำคัญกว่าสถาปัตยกรรม&lt;/p&gt;

&lt;h2&gt;
  
  
  วิธีการเรียกใช้งาน Holo3 API
&lt;/h2&gt;

&lt;p&gt;การใช้งาน Holo3 API คือการวนลูปจับภาพหน้าจอ-ดำเนินการ:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. ตั้งค่าการยืนยันตัวตน
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# H Company Inference API base URL&lt;/span&gt;
https://api.hcompany.ai/v1

&lt;span class="c"&gt;# Header&lt;/span&gt;
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;รับ API key ได้ที่ hcompany.ai/holo-models-api (รุ่นฟรีสำหรับ Holo3-35B-A3B)&lt;/p&gt;

&lt;h3&gt;
  
  
  2. ส่งภาพหน้าจอพร้อมงาน
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;httpx&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pyautogui&lt;/span&gt;

&lt;span class="n"&gt;screenshot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pyautogui&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;screenshot&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;screenshot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/tmp/screen.png&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/tmp/screen.png&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;image_b64&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;b64encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;httpx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.hcompany.ai/v1/computer-use&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;holo3-122b-a10b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;task&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Open the invoice folder and find the most recent PDF&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;screenshot&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;image_b64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;screen_width&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1920&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;screen_height&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1080&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. แยกวิเคราะห์และดำเนินการ
&lt;/h3&gt;

&lt;p&gt;API ส่ง action ที่มีโครงสร้าง เช่น:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"click"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"coordinate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;245&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;380&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reasoning"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"The invoice folder icon is visible at this position"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ประเภท action: &lt;code&gt;click&lt;/code&gt;, &lt;code&gt;double_click&lt;/code&gt;, &lt;code&gt;right_click&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, &lt;code&gt;key&lt;/code&gt;, &lt;code&gt;scroll&lt;/code&gt;, &lt;code&gt;screenshot_request&lt;/code&gt;, &lt;code&gt;task_complete&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. วนซ้ำจนกว่าจะเสร็จสมบูรณ์
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run_computer_use_task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;step&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_steps&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;screenshot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;capture_screen&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;call_holo3_api&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;screenshot&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action_type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;task_complete&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Done in &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;step&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; steps&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;result&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

        &lt;span class="nf"&gt;execute_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;TimeoutError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Task not completed within step limit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  การทดสอบการเรียก Holo3 API ด้วย Apidog
&lt;/h2&gt;

&lt;p&gt;หลังเชื่อม Holo3 API แล้ว ควรทดสอบ integration ให้มั่นใจว่าสามารถรันอัตโนมัติได้อย่างเสถียร &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; คือเครื่องมือที่ตอบโจทย์นี้&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;นำเข้า Endpoint:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ใน Apidog สร้าง HTTP request ไปที่ &lt;code&gt;https://api.hcompany.ai/v1/computer-use&lt;/code&gt; ใส่ &lt;code&gt;Authorization&lt;/code&gt; header เป็นตัวแปรสภาพแวดล้อม&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ตั้งค่าการตรวจสอบคำขอ:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ใช้ validation script ตรวจสอบโครงสร้าง response อัตโนมัติ&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ใน Apidog's post-response script&lt;/span&gt;
&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Action type is valid&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;validActions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;key&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;scroll&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;task_complete&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;screenshot_request&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;validActions&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;include&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;action_type&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Coordinates are within screen bounds&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;coordinate&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;coordinate&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;within&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1920&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;coordinate&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;within&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1080&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;จำลอง API ระหว่างพัฒนา:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ใช้ Smart Mock ของ Apidog เพื่อสร้าง response Holo3 จำลอง ไม่ต้องเปลืองเครดิตจริง&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;เรียกใช้สถานการณ์ทดสอบ:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
เชื่อมต่อคำขอหลาย Holo3 ใน Apidog Test Scenario เพื่อจำลอง task หลายขั้นตอน ตรวจสอบลำดับ action ก่อนรันจริง&lt;/p&gt;

&lt;h2&gt;
  
  
  Holo3 เทียบกับ Claude Computer Use เทียบกับ OpenAI Operator
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Holo3-122B&lt;/th&gt;
&lt;th&gt;Holo3-35B&lt;/th&gt;
&lt;th&gt;Claude Computer Use&lt;/th&gt;
&lt;th&gt;OpenAI Operator&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OSWorld-Verified&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;78.85%&lt;/td&gt;
&lt;td&gt;~55%&lt;/td&gt;
&lt;td&gt;~65%&lt;/td&gt;
&lt;td&gt;~62%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;การเข้าถึง API&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ใช่&lt;/td&gt;
&lt;td&gt;ใช่ (ฟรี)&lt;/td&gt;
&lt;td&gt;ใช่&lt;/td&gt;
&lt;td&gt;ใช่&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;น้ำหนักแบบเปิด&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ไม่&lt;/td&gt;
&lt;td&gt;ใช่ (Apache 2.0)&lt;/td&gt;
&lt;td&gt;ไม่&lt;/td&gt;
&lt;td&gt;ไม่&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;สามารถโฮสต์เองได้&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ไม่&lt;/td&gt;
&lt;td&gt;ใช่&lt;/td&gt;
&lt;td&gt;ไม่&lt;/td&gt;
&lt;td&gt;ไม่&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ราคาเทียบกับ GPT-5.4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ต่ำกว่า&lt;/td&gt;
&lt;td&gt;ต่ำกว่ามาก&lt;/td&gt;
&lt;td&gt;เทียบเคียงกัน&lt;/td&gt;
&lt;td&gt;ราคา GPT-5.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ดีที่สุดสำหรับ&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;องค์กรโปรดักชัน&lt;/td&gt;
&lt;td&gt;dev/test/โอเพนซอร์ส&lt;/td&gt;
&lt;td&gt;Anthropic ecosystem&lt;/td&gt;
&lt;td&gt;OpenAI ecosystem&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  เลือกใช้งาน
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Holo3-122B&lt;/strong&gt;: แม่นยำสูงสุดสำหรับ multi-app workflow ซับซ้อน&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Holo3-35B&lt;/strong&gt;: เหมาะกับ dev, test, โอเพนซอร์ส, ต้องโฮสต์เอง&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Computer Use&lt;/strong&gt;: สำหรับผู้ใช้ Anthropic API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI Operator&lt;/strong&gt;: หากใช้ GPT-5.4 หรือ OpenAI stack&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  กรณีการใช้งานระดับองค์กร
&lt;/h2&gt;

&lt;p&gt;Holo3 เหมาะกับเวิร์กโฟลว์ที่ API automation ไปไม่ถึง เช่น&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ระบบเดิมไม่มี API&lt;/strong&gt;: ERP/CRM เก่า, นำทาง UI อัตโนมัติ&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;กระทบยอดข้ามแพลตฟอร์ม&lt;/strong&gt;: ดึง PDF → อัปเดตสเปรดชีต → อัปเดต dashboard&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regression Testing เว็บแอป&lt;/strong&gt;: ไม่ต้องดูแล selector Selenium, ใช้ task ภาษาไทย/อังกฤษตรงๆ โมเดลจะปรับตาม UI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ข่าวกรองการแข่งขัน&lt;/strong&gt;: ดึงข้อมูลจากเว็บที่บล็อกการสกรัปแบบเดิม&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ผล benchmark ภายใน H Company ชี้ว่า Holo3 เด่นสุดใน workflow multi-app — จุดที่ต้อง reasoning ข้ามระบบ&lt;/p&gt;

&lt;h2&gt;
  
  
  ก้าวต่อไป: Adaptive Agency
&lt;/h2&gt;

&lt;p&gt;H Company กำลังพัฒนา &lt;strong&gt;Adaptive Agency&lt;/strong&gt; — โมเดลที่เรียนรู้ซอฟต์แวร์/ระบบใหม่แบบเรียลไทม์ แม้ไม่เคยเห็นมาก่อน&lt;/p&gt;

&lt;p&gt;AI automation ปัจจุบัน (รวม Holo3) ยังฝึกจาก environment ที่จำกัด Adaptive Agency จะ reasoning โครงสร้างซอฟต์แวร์จาก zero-shot สร้าง model การทำงานเอง และดำเนินงานได้แบบอัตโนมัติเต็มที่&lt;/p&gt;

&lt;p&gt;หากสำเร็จ ข้อจำกัดหลักของ AI เดสก์ท็อป automation จะหมดไป&lt;/p&gt;

&lt;h2&gt;
  
  
  สรุป
&lt;/h2&gt;

&lt;p&gt;Holo3 เป็นมาตรฐานใหม่ของ AI สำหรับการใช้งานคอมพิวเตอร์เดสก์ท็อป ด้วยคะแนน 78.85% ใน OSWorld-Verified เหนือกว่า Claude และ GPT-5.x ชัดเจน โดยเฉพาะ multi-step workflow รุ่น 35B ฟรีและโอเพนเวท (Apache 2.0) เปิดโอกาสให้ dev ทดลองได้โดยไม่มีต้นทุน&lt;/p&gt;

&lt;p&gt;การผสานรวม Holo3 API ทำได้ง่าย: จับภาพหน้าจอ, ส่ง POST, รับ action, execute, วนลูป Apidog ช่วยให้ integration น่าเชื่อถือ — ตรวจสอบ response, จำลองระหว่าง dev, chaining scenario ก่อน production&lt;/p&gt;

&lt;p&gt;ถ้าคุณสร้างอะไรที่เกี่ยวกับ GUI เดสก์ท็อป ลองใช้ &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog ฟรี&lt;/a&gt; และทดสอบ integration Holo3 ของคุณก่อนนำขึ้น production&lt;/p&gt;

&lt;h2&gt;
  
  
  คำถามที่พบบ่อย
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Holo3 คืออะไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Holo3 คือโมเดล AI สำหรับการใช้งานคอมพิวเตอร์จาก H Company รับภาพหน้าจอเป็น input แล้วส่ง action (คลิก, พิมพ์, เลื่อน) กลับมาเพื่อทำ task บนเดสก์ท็อป/เบราว์เซอร์ ได้ 78.85% OSWorld-Verified (สูงสุดปัจจุบัน)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Holo3 เป็นโอเพนซอร์สหรือไม่?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Holo3-35B-A3B (รุ่นเล็ก) เป็นโอเพนเวท (Apache 2.0) ดาวน์โหลดได้จาก HuggingFace, Holo3-122B มีแค่ API ทั้งคู่เรียกผ่าน inference API H Company ได้ (35B มีฟรี)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;เกณฑ์มาตรฐาน OSWorld ทำงานอย่างไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
OSWorld ทดสอบ AI ด้วยงานคอมพิวเตอร์จริง เช่น นำทางเว็บ, จัดการไฟล์, เวิร์กโฟลว์ข้ามแอป ความสำเร็จวัดจากสถานะระบบจริงหลังเอเจนต์ทำงาน&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Holo3 เปรียบเทียบกับ Claude Computer Use อย่างไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Holo3-122B คะแนน OSWorld-Verified สูงกว่า (78.85% vs ~65%) และค่าใช้จ่ายต่อภารกิจถูกกว่า Claude เหมาะกับผู้ใช้ Anthropic API&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ฉันสามารถรัน Holo3 บนเครื่องของฉันเองได้หรือไม่?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ถ้าใช้ Holo3-35B-A3B ทำได้ (น้ำหนักอยู่ใน HuggingFace, Apache 2.0) Holo3-122B ใช้ API เท่านั้น&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;กรณีการใช้งานหลักสำหรับ API การใช้งานคอมพิวเตอร์คืออะไร?&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;automation ระบบเดิมไม่มี API
&lt;/li&gt;
&lt;li&gt;เวิร์กโฟลว์ข้อมูลข้ามแอป
&lt;/li&gt;
&lt;li&gt;regression test เว็บแอป (ไม่ต้องใช้ selector)
&lt;/li&gt;
&lt;li&gt;สกรัปข้อมูลเพื่อข่าวกรอง
&lt;/li&gt;
&lt;li&gt;งาน GUI เดสก์ท็อปที่ต้องใช้แรงคน&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;ฉันจะทดสอบการผสานรวม Holo3 API ของฉันได้อย่างไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ใช้ &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; เพื่อนำเข้า endpoint, ตั้ง validation, mock API, และสร้าง test scenario ตรวจจับปัญหาก่อนรันจริง&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Adaptive Agency" ในแผนงานของ Holo3 คืออะไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
คือเป้าหมายสร้างโมเดลที่นำทางซอฟต์แวร์องค์กรใหม่ได้แบบเรียลไทม์ reasoning UI โดยไม่ต้องฝึกมาโดยตรง — ลดข้อจำกัด AI automation ในองค์กรเฉพาะทาง&lt;/p&gt;

</description>
    </item>
    <item>
      <title>axios 1.14.1 โดนโจมตี: วิธีรับมือและป้องกัน</title>
      <dc:creator>Thanawat Wongchai</dc:creator>
      <pubDate>Thu, 02 Apr 2026 08:52:18 +0000</pubDate>
      <link>https://dev.to/thanawat_wonchai/axios-1141-odnocchmtii-withiirabmuueaelapngkan-465f</link>
      <guid>https://dev.to/thanawat_wonchai/axios-1141-odnocchmtii-withiirabmuueaelapngkan-465f</guid>
      <description>&lt;h2&gt;
  
  
  สรุปโดยย่อ
&lt;/h2&gt;

&lt;p&gt;ในวันที่ 30–31 มีนาคม 2026, axios เวอร์ชัน 1.14.1 และ 0.30.4 ถูกโจมตีบน npm ด้วยแพ็คเกจที่พึ่งพาซึ่งเป็นอันตราย และแพ็คเกจนั้นได้ติดตั้งโทรจันสำหรับเข้าถึงระยะไกล (RAT) บนเครื่องที่ติดเชื้อ ทั้งสองเวอร์ชันถูกถอนการเผยแพร่แล้ว เวอร์ชันที่ปลอดภัยคือ 1.14.0 หากคุณติดตั้ง &lt;a href="mailto:axios@1.14.1"&gt;axios@1.14.1&lt;/a&gt; หรือ 0.30.4 ให้ถือว่าเครื่องของคุณถูกบุกรุกและเปลี่ยนข้อมูลประจำตัวทั้งหมดทันที&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;ลองใช้ Apidog วันนี้&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  axios คืออะไร และทำไมเรื่องนี้ถึงสำคัญ
&lt;/h2&gt;

&lt;p&gt;axios มีการดาวน์โหลด 100 ล้านครั้งต่อสัปดาห์บน npm เป็น HTTP client ที่ใช้ในเฟรมเวิร์กส่วนหน้าจำนวนนับไม่ถ้วน, บริการ Node.js ส่วนหลังบ้าน, และแอปพลิเคชันระดับองค์กร เมื่อแพ็คเกจที่เป็นรากฐานสำคัญขนาดนี้ถูกบุกรุก ผลกระทบก็มหาศาล — นักพัฒนาที่รัน &lt;code&gt;npm install&lt;/code&gt; ในช่วงเวลาสั้นๆ ระหว่างวันที่ 30-31 มีนาคม ได้ดึงมัลแวร์เข้าสู่เครื่องของตนโดยไม่รู้ตัว&lt;/p&gt;

&lt;p&gt;นี่ไม่ใช่ความเสี่ยงในห่วงโซ่อุปทานที่เป็นเพียงสมมติฐาน มันเกิดขึ้นจริง ได้รับการยืนยันแล้ว และเพย์โหลดนั้นร้ายแรง: โทรจันสำหรับเข้าถึงระยะไกลแบบหลายขั้นตอนที่สามารถรันคำสั่งใดๆ ก็ได้, ดึงข้อมูลระบบออกไป, และคงอยู่บนเครื่องที่ติดเชื้อ&lt;/p&gt;

&lt;p&gt;หากทีมของคุณใช้ axios และคุณใช้ Apidog เพื่อออกแบบและทดสอบการรวม HTTP client ของคุณ โปรดอ่านสิ่งนี้ก่อนการปรับใช้ครั้งถัดไป&lt;/p&gt;

&lt;h2&gt;
  
  
  ไทม์ไลน์ของการโจมตี
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;30 มีนาคม 2026 — 23:59:12 UTC:&lt;/strong&gt; แพ็คเกจที่เป็นอันตรายชื่อ &lt;code&gt;plain-crypto-js@4.2.1&lt;/code&gt; ถูกเผยแพร่ไปยัง npm โดยบัญชีที่ใช้ &lt;code&gt;nrwise@proton.me&lt;/code&gt; เวอร์ชันก่อนหน้า (&lt;code&gt;4.2.0&lt;/code&gt;) ที่สะอาด ถูกเผยแพร่ไปเมื่อ 18 ชั่วโมงก่อนหน้านั้น โดยเป็นการสร้างชื่อที่คล้ายคลึงกับไลบรารี &lt;code&gt;crypto-js&lt;/code&gt; ที่ถูกต้องเพื่อหลอกลวง (typosquat)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;31 มีนาคม 2026 — 00:05:41 UTC:&lt;/strong&gt; ระบบตรวจจับมัลแวร์อัตโนมัติของ Socket ได้ตั้งค่าสถานะ &lt;code&gt;plain-crypto-js@4.2.1&lt;/code&gt; ว่าเป็นอันตราย — เพียงหกนาทีหลังจากที่มันถูกเผยแพร่&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;31 มีนาคม 2026 — หลังเที่ยงคืนไม่นาน:&lt;/strong&gt; &lt;code&gt;axios@1.14.1&lt;/code&gt; ถูกเผยแพร่ไปยัง npm โดยดึง &lt;code&gt;plain-crypto-js@4.2.1&lt;/code&gt; เป็นแพ็คเกจที่พึ่งพา การเผยแพร่ครั้งนี้ไม่ปรากฏในแท็กอย่างเป็นทางการของ GitHub repository ของ axios แท็กที่ถูกต้องล่าสุดยังคงเป็น &lt;code&gt;v1.14.0&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;31 มีนาคม 2026 — เช้า:&lt;/strong&gt; ปัญหา GitHub หมายเลข &lt;code&gt;#10604&lt;/code&gt; ถูกเปิดเผยต่อสาธารณะ โดยรายงานว่า &lt;code&gt;axios@1.14.1&lt;/code&gt; และ &lt;code&gt;axios@0.30.4&lt;/code&gt; ถูกบุกรุก ผู้ดูแล axios ยืนยันว่าในเบื้องต้นไม่สามารถเพิกถอนการเข้าถึงของผู้โจมตีได้ — บัญชีที่ถูกบุกรุกมีสิทธิ์ npm สูงกว่าผู้ดูแลที่ถูกต้องตามกฎหมาย&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;31 มีนาคม 2026:&lt;/strong&gt; ทั้ง &lt;code&gt;axios@1.14.1&lt;/code&gt; และ &lt;code&gt;axios@0.30.4&lt;/code&gt; ถูกถอนการเผยแพร่จาก npm ผู้ดูแล axios เริ่มเพิกถอนโทเค็น, เพิ่มความเข้มงวดในการควบคุมการเผยแพร่, และกำลังตรวจสอบว่าโทเค็น npm ที่มีอายุการใช้งานยาวนานถูกใช้ประโยชน์อย่างไรเพื่อเข้าถึงการเผยแพร่โดยไม่ได้รับอนุญาต&lt;/p&gt;

&lt;h2&gt;
  
  
  การโจมตีทำงานอย่างไร
&lt;/h2&gt;

&lt;p&gt;การโจมตีนี้ใช้ช่องโหว่ในขั้นตอนการเผยแพร่ของ axios: โทเค็น npm ที่มีอายุการใช้งานยาวนานที่เคยใช้ควบคู่กับการเผยแพร่ที่เชื่อถือได้ ผู้โจมตี — น่าจะหลังจากที่เจาะข้อมูลประจำตัวของผู้ดูแล — ใช้โทเค็นนี้เพื่อเผยแพร่เวอร์ชันใหม่นอกกระบวนการเผยแพร่ปกติ&lt;/p&gt;

&lt;p&gt;เวอร์ชันใหม่ได้เพิ่ม &lt;code&gt;plain-crypto-js@4.2.1&lt;/code&gt; เป็นแพ็คเกจที่พึ่งพา ชื่อแพ็คเกจถูกออกแบบมาให้ดูเหมือนยูทิลิตีการเข้ารหัสที่ถูกต้องตามกฎหมาย; เวอร์ชัน &lt;code&gt;4.2.0&lt;/code&gt; ที่สะอาดก่อนหน้านี้ถูกสร้างขึ้นเพื่อสร้างประวัติสั้นๆ เพื่อลดความสงสัย&lt;/p&gt;

&lt;p&gt;ภายใน &lt;code&gt;plain-crypto-js@4.2.1&lt;/code&gt; การวิเคราะห์ของ Socket พบว่ามี &lt;strong&gt;เพย์โหลดแบบหลายขั้นตอน&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;ขั้นตอนที่ 1 — การดำเนินการ:&lt;/strong&gt; แพ็คเกจจะรันโค้ดเมื่อทำการติดตั้ง (ผ่านสคริปต์ npm lifecycle) เพื่อปล่อยเพย์โหลดรอง&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ขั้นตอนที่ 2 — การติดตั้ง RAT:&lt;/strong&gt; เพย์โหลดจะติดตั้งโทรจันสำหรับเข้าถึงระยะไกล (RAT) ที่เปิดแบ็คดอร์แบบถาวร&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ขั้นตอนที่ 3 — การดึงข้อมูลออก:&lt;/strong&gt; RAT สามารถรันคำสั่งเชลล์ใดๆ ที่ส่งมาจากเซิร์ฟเวอร์ C2, อ่านตัวแปรสภาพแวดล้อมและความลับจากระบบไฟล์, และส่งข้อมูลระบบออกไปทางเครือข่าย&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;RAT จะคงอยู่แม้หลังจากรีบูตเครื่อง ซึ่งหมายความว่าเครื่องที่ติดตั้งเวอร์ชันที่ถูกบุกรุกจะยังคงมีความเสี่ยงแม้ว่าจะลบแพ็คเกจ npm ออกไปแล้วก็ตาม เว้นแต่จะค้นหาและลบ RAT ออกไปอย่างชัดเจน&lt;/p&gt;

&lt;h2&gt;
  
  
  ฉันได้รับผลกระทบหรือไม่?
&lt;/h2&gt;

&lt;p&gt;คุณอาจได้รับผลกระทบหาก:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;คุณรัน &lt;code&gt;npm install axios&lt;/code&gt; หรือ &lt;code&gt;npm install&lt;/code&gt; (โดยมี axios อยู่ใน &lt;code&gt;package.json&lt;/code&gt;) ระหว่างประมาณ &lt;strong&gt;30 มีนาคม, 23:59 UTC&lt;/strong&gt; ถึง &lt;strong&gt;31 มีนาคม 2026 เที่ยง UTC&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;node_modules/axios/package.json&lt;/code&gt; ของคุณแสดงเวอร์ชัน &lt;code&gt;1.14.1&lt;/code&gt; หรือ &lt;code&gt;0.30.4&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;package-lock.json&lt;/code&gt; หรือ &lt;code&gt;yarn.lock&lt;/code&gt; ของคุณระบุ axios เป็น &lt;code&gt;1.14.1&lt;/code&gt; หรือ &lt;code&gt;0.30.4&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ตรวจสอบทันที:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# ตรวจสอบเวอร์ชันที่ติดตั้ง&lt;/span&gt;
npm list axios

&lt;span class="c"&gt;# ตรวจสอบใน lock file&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s1"&gt;'"axios"'&lt;/span&gt; package-lock.json | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-5&lt;/span&gt;

&lt;span class="c"&gt;# ตรวจสอบการมีอยู่ของ plain-crypto-js&lt;/span&gt;
npm list plain-crypto-js
&lt;span class="nb"&gt;ls &lt;/span&gt;node_modules/plain-crypto-js 2&amp;gt;/dev/null &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"INFECTED"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Not found"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;หาก &lt;code&gt;plain-crypto-js&lt;/code&gt; ปรากฏอยู่ใน &lt;code&gt;node_modules&lt;/code&gt; ของคุณ แสดงว่าคุณได้รันเวอร์ชันที่เป็นอันตราย&lt;/p&gt;

&lt;h2&gt;
  
  
  สิ่งที่ต้องทำตอนนี้
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. อัปเดต axios ทันที
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;axios@1.14.0
&lt;span class="c"&gt;# หรือ pin ไปที่เวอร์ชันล่าสุดที่ปลอดภัย&lt;/span&gt;
npm &lt;span class="nb"&gt;install &lt;/span&gt;axios@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ตรวจสอบอีกครั้ง:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm list axios
&lt;span class="c"&gt;# ควรแสดง 1.14.0 หรือสูงกว่า (เมื่อมี clean 1.14.x ออก)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. หากคุณติดตั้งเวอร์ชันที่ถูกบุกรุก
&lt;/h3&gt;

&lt;p&gt;อย่าถือว่านี่เป็นแค่การอัปเดตแพ็คเกจที่พึ่งพา ให้ถือว่าเครื่องของคุณถูกบุกรุก:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;เปลี่ยนความลับทั้งหมด&lt;/strong&gt; ที่สามารถเข้าถึงได้จากเครื่องนั้น เช่น API key, ข้อมูลประจำตัวฐานข้อมูล, คีย์ SSH, โทเค็นคลาวด์, ตัวแปร &lt;code&gt;.env&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ตรวจสอบตัวแปรสภาพแวดล้อม&lt;/strong&gt; — RAT มุ่งเป้าความลับใน environment และไฟล์ระบบ&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ตรวจสอบการเชื่อมต่อเครือข่ายขาออก&lt;/strong&gt; ในช่วงเวลาที่ได้รับผลกระทบ — มองหา connection ไปยัง IP แปลกๆ&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;สแกนหาความคงทน&lt;/strong&gt; — ตรวจสอบ cron jobs, สคริปต์ startup, และ systemd service ที่ถูกเพิ่มในช่วงเวลานั้น&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ติดตั้งอิมเมจใหม่ให้กับเครื่อง&lt;/strong&gt; สำหรับ CI runner หรือ production server หากเป็น laptop นักพัฒนา ให้เปลี่ยนข้อมูลประจำตัวทั้งหมดก่อนถือว่าเครื่องสะอาด&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. ตรวจสอบ CI/CD Pipelines ของคุณ
&lt;/h3&gt;

&lt;p&gt;หาก pipeline ของคุณรัน &lt;code&gt;npm install&lt;/code&gt; ในช่วงเวลาดังกล่าว CI environment ของคุณอาจถูกบุกรุก ตรวจสอบดังนี้:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# ตรวจสอบ build logs สำหรับช่วงเวลาที่มีปัญหา&lt;/span&gt;
&lt;span class="c"&gt;# มองหา axios@1.14.1 ใน output การติดตั้ง&lt;/span&gt;

&lt;span class="c"&gt;# ตรวจสอบว่า node_modules ใน CI ปัจจุบันสะอาด&lt;/span&gt;
npm list axios plain-crypto-js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เปลี่ยนความลับที่ CI pipeline เข้าถึงได้ เช่น deployment keys, cloud provider credentials, registry tokens&lt;/p&gt;

&lt;h3&gt;
  
  
  4. ตรวจสอบไฟล์ lock ของคุณ
&lt;/h3&gt;

&lt;p&gt;ไฟล์ lock (&lt;code&gt;package-lock.json&lt;/code&gt;, &lt;code&gt;yarn.lock&lt;/code&gt;) ควรระบุเวอร์ชันที่แน่นอน หาก lock file ของคุณมี &lt;code&gt;1.14.1&lt;/code&gt; ให้สร้างใหม่:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# ลบและ regenerate&lt;/span&gt;
&lt;span class="nb"&gt;rm &lt;/span&gt;package-lock.json
npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ตรวจสอบ lock file ใหม่ว่าระบุ axios เป็นเวอร์ชันที่ปลอดภัยก่อน commit&lt;/p&gt;

&lt;h2&gt;
  
  
  การใช้ Apidog เพื่อตรวจสอบการเรียก API ของ axios ของคุณ
&lt;/h2&gt;

&lt;p&gt;หากคุณใช้ axios เป็น HTTP client สำหรับการเรียก API, &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; สามารถช่วยคุณยืนยันว่าการรวมของคุณยังคงส่งคำขอที่ถูกต้องหลังจากอัปเดตแพ็คเกจที่พึ่งพา&lt;/p&gt;

&lt;p&gt;หลังจากอัปเดตเป็น &lt;a href="mailto:axios@1.14.0"&gt;axios@1.14.0&lt;/a&gt; ให้นำเข้า API endpoints ที่มีอยู่ของคุณไปยัง Apidog และรัน regression test อย่างรวดเร็วเพื่อยืนยันว่าพฤติกรรมไม่เปลี่ยนแปลง การยืนยันการตอบกลับของ Apidog ช่วยให้คุณตรวจสอบค่าฟิลด์, เฮดเดอร์, และรหัสสถานะที่แน่นอนได้:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Apidog post-response assertion&lt;/span&gt;
&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Response is clean — no injected fields&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;not&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;have&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;property&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;__injected&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;X-Injected-Header&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;รันชุดทดสอบทั้งหมดของคุณกับ axios รุ่นใหม่ใน Apidog จะช่วยให้คุณมี baseline ที่สะอาดก่อน deploy ขึ้น production&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ลองใช้ Apidog ฟรีเพื่อตั้งค่าการทดสอบ HTTP client regression&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ทำไมการโจมตี Supply Chain บน npm จึงยากที่จะหยุดยั้ง
&lt;/h2&gt;

&lt;p&gt;การโจมตี axios ไม่ใช่กรณีแรก — นี่คือเหตุการณ์ supply chain ที่เคยเกิดขึ้น:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;event-stream (2018):&lt;/strong&gt; ผู้ดูแลที่เป็นอันตรายเพิ่มเพย์โหลดที่กำหนดเป้าหมายกระเป๋าเงิน Bitcoin&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ua-parser-js (2021):&lt;/strong&gt; ถูกบุกรุกเพื่อติดตั้ง cryptominer และขโมยรหัสผ่าน&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;node-ipc (2022):&lt;/strong&gt; ผู้ดูแลจงใจเพิ่มโค้ดที่เป็นอันตรายซึ่งกำหนดเป้าหมาย IP ของรัสเซีย/เบลารุส&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;xz utils (2024):&lt;/strong&gt; แคมเปญวิศวกรรมสังคมสองปีเพื่อแทรกแบ็คดอร์เข้าสู่ไลบรารีการบีบอัดหลักของ Linux&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;axios (2026):&lt;/strong&gt; ข้อมูลประจำตัวของผู้ดูแลที่ถูกบุกรุกถูกใช้เผยแพร่ RAT ผ่านแพ็คเกจที่พึ่งพาซึ่งเป็นอันตราย&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;จุดร่วม: &lt;strong&gt;ความเชื่อถือในบัญชีผู้เผยแพร่ ไม่ใช่ในโค้ด&lt;/strong&gt; หากข้อมูลประจำตัวของผู้ดูแลถูกบุกรุก ผู้โจมตีก็จะได้รับสิทธิ์เผยแพร่เช่นเดียวกับผู้ดูแลจริง&lt;/p&gt;

&lt;p&gt;มาตรการที่ควรพิจารณา:&lt;br&gt;
| มาตรการ                       | สิ่งที่ทำ                                                        |&lt;br&gt;
|-------------------------------|-------------------------------------------------------------------|&lt;br&gt;
| ไฟล์ Lock (&lt;code&gt;package-lock.json&lt;/code&gt;) | ระบุเวอร์ชันที่แน่นอน, ป้องกันการอัปเกรดแบบไม่รู้ตัว           |&lt;br&gt;
| &lt;code&gt;npm audit&lt;/code&gt; ใน CI             | ตรวจจับช่องโหว่ที่ทราบก่อน deploy                               |&lt;br&gt;
| Socket.dev / Snyk             | วิเคราะห์พฤติกรรม — ตรวจจับแพ็คเกจที่น่าสงสัยแม้ไม่มี CVEs      |&lt;br&gt;
| 2FA บน npm                    | ทำให้การบุกรุกข้อมูลประจำตัวทำได้ยากขึ้น                        |&lt;br&gt;
| โทเค็น publish ที่มีอายุสั้น   | จำกัดช่วงเวลาเสี่ยงหากโทเค็นรั่วไหล                            |&lt;br&gt;
| ตรวจ lock file ใน PR review   | ตรวจสอบการเปลี่ยนแปลงแพ็คเกจที่พึ่งพาในการตรวจสอบโค้ด           |&lt;/p&gt;

&lt;p&gt;ทีม axios ยอมรับว่าโทเค็น npm ที่มีอายุการใช้งานยาวนานเป็นปัญหา และกำลังดำเนินมาตรการควบคุมการเผยแพร่ที่เข้มงวดขึ้น แต่การแก้ไขต้องมาจากระบบนิเวศโดยรวม ไม่ใช่แค่แพ็คเกจเดียว&lt;/p&gt;

&lt;h2&gt;
  
  
  ตัวบ่งชี้การบุกรุก (IOCs)
&lt;/h2&gt;

&lt;p&gt;สรุปจากการวิเคราะห์ของ Socket:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;แพ็คเกจที่เป็นอันตราย:&lt;/strong&gt; &lt;code&gt;plain-crypto-js@4.2.1&lt;/code&gt;, &lt;code&gt;axios@1.14.1&lt;/code&gt;, &lt;code&gt;axios@0.30.4&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;อีเมลผู้เผยแพร่:&lt;/strong&gt; &lt;code&gt;nrwise@proton.me&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;พฤติกรรม:&lt;/strong&gt; มี network connection ตอนติดตั้ง npm, RAT คงทน, ดึง env variable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;เวอร์ชัน axios ที่ปลอดภัย:&lt;/strong&gt; 1.14.0 และต่ำกว่า (ยกเว้น 0.30.4), 1.13.x, 1.12.x&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;หากสงสัยว่าเครื่องติดเชื้อ ให้รายงานไปที่ &lt;a href="mailto:security@npmjs.com"&gt;security@npmjs.com&lt;/a&gt; และเก็บ log ไว้&lt;/p&gt;

&lt;h2&gt;
  
  
  สรุป
&lt;/h2&gt;

&lt;p&gt;กรณี axios 1.14.1 ถูกบุกรุก เป็นเครื่องเตือนใจว่าสาย supply chain ต้องป้องกันตลอดเวลา — ล็อกเวอร์ชัน, ใช้เครื่องมือวิเคราะห์เช่น Socket ใน CI, เปลี่ยน credentials เมื่อมีสิ่งผิดปกติ, ตรวจ lock file เสมอในการ review&lt;/p&gt;

&lt;p&gt;หากคุณต้องการสร้างความมั่นใจในการรวม API หลังอัปเดต axios, &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; มีชุดทดสอบ, การยืนยัน, และ mock tools เพื่อยืนยันพฤติกรรม HTTP client ของคุณก่อน deploy&lt;/p&gt;

&lt;h2&gt;
  
  
  คำถามที่พบบ่อย
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;axios เวอร์ชันใดบ้างที่ถูกบุกรุก?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;axios@1.14.1&lt;/code&gt; และ &lt;code&gt;axios@0.30.4&lt;/code&gt; ถูกถอนการเผยแพร่จาก npm แล้ว เวอร์ชันที่ปลอดภัยคือ &lt;code&gt;1.14.0&lt;/code&gt; (หรือ 1.13.x, 1.12.x)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;เพย์โหลดที่เป็นอันตรายของ axios ทำอะไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
มันดึง &lt;code&gt;plain-crypto-js@4.2.1&lt;/code&gt; ซึ่งติดตั้งเพย์โหลดแบบหลายขั้นตอนรวมถึง RAT ที่สามารถรันคำสั่งใดๆ จากเซิร์ฟเวอร์ C2, ดึง env และ secrets ออกไป, และคงอยู่แม้รีบูตเครื่อง&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ฉันจะรู้ได้อย่างไรว่าฉันติดตั้งเวอร์ชันที่ถูกบุกรุก?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
รัน &lt;code&gt;npm list axios&lt;/code&gt; — หากแสดง 1.14.1 หรือ 0.30.4 แสดงว่าคุณได้รับผลกระทบ ตรวจสอบ &lt;code&gt;npm list plain-crypto-js&lt;/code&gt; ด้วย — หากมี แสดงว่าโค้ดอันตรายรันไปแล้ว&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;การอัปเดต axios อย่างเดียวเพียงพอหรือไม่?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ไม่พอ RAT อาจคงอยู่ในเครื่องแล้ว ต้องเปลี่ยน secrets และตรวจหา persistence mechanism&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ผู้โจมตีเผยแพร่ไปยัง npm ได้อย่างไรโดยที่ไม่ได้เป็นผู้ดูแล?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ผู้โจมตีอาจได้ credentials ของผู้ดูแลและใช้โทเค็น npm ที่มีอายุยาวซึ่งมีสิทธิ์ publish&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ความแตกต่างระหว่างสิ่งนี้กับช่องโหว่ทั่วไปคืออะไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ช่องโหว่คือ bug ในโค้ดปกติ การโจมตี supply chain คือการแทรกโค้ดอันตรายผ่านช่องทาง publish ที่เชื่อถือได้ โค้ดอันตรายไม่เคยอยู่ใน GitHub — มันถูก inject ใน npm publish&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ฉันจะปกป้องโปรเจกต์ของฉันจาก supply chain attack ได้อย่างไร?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ใช้ lock file, รัน &lt;code&gt;npm audit&lt;/code&gt; ใน CI, วิเคราะห์พฤติกรรมด้วย Socket.dev, เปิด 2FA ใน npm, ใช้โทเค็น publish ที่อายุสั้น, ตรวจ lock file diff ใน code review&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>news</category>
      <category>npm</category>
      <category>security</category>
    </item>
    <item>
      <title>Microsoft VibeVoice คืออะไร? วิธีใช้โมเดล AI เสียงโอเพนซอร์ส</title>
      <dc:creator>Thanawat Wongchai</dc:creator>
      <pubDate>Thu, 02 Apr 2026 08:23:53 +0000</pubDate>
      <link>https://dev.to/thanawat_wonchai/microsoft-vibevoice-khuueaair-withiiaichomedl-ai-esiiyngoephnchrs-p36</link>
      <guid>https://dev.to/thanawat_wonchai/microsoft-vibevoice-khuueaair-withiiaichomedl-ai-esiiyngoephnchrs-p36</guid>
      <description>&lt;h2&gt;
  
  
  สรุปย่อ
&lt;/h2&gt;

&lt;p&gt;VibeVoice คือชุดโมเดล AI เสียงโอเพนซอร์สจาก Microsoft ประกอบด้วย 3 โมเดลหลัก: VibeVoice-1.5B สำหรับแปลงข้อความเป็นคำพูด (TTS), VibeVoice-Realtime-0.5B สำหรับ TTS แบบสตรีมมิ่ง, และ VibeVoice-ASR สำหรับรู้จำคำพูด (ASR) ทั้งหมดรันแบบโลคอล ติดตั้งใช้งานง่าย และมี API สำหรับการรวมเข้ากับระบบของคุณ คู่มือนี้สรุปวิธีติดตั้ง การเรียกใช้งานจริง และการทดสอบ API&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;ทดลองใช้ Apidog วันนี้&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  บทนำ
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/microsoft/VibeVoice?tab=readme-ov-file" rel="noopener noreferrer"&gt;Microsoft ได้เปิดตัว VibeVoice&lt;/a&gt; ในปี 2026 เป็นเฟรมเวิร์ก AI เสียงโอเพนซอร์สที่รวมทั้งโมเดลสังเคราะห์เสียงและรู้จำเสียง สามารถรันบนเครื่องของคุณเองโดยไม่ต้องใช้คลาวด์&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frwojs0cirvmfh69surev.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frwojs0cirvmfh69surev.png" alt="สถาปัตยกรรม VibeVoice" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;เฟรมเวิร์กนี้ประกอบด้วย:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VibeVoice-1.5B&lt;/strong&gt;: สร้างเสียงสนทนาหลายผู้พูด มีอารมณ์ ครอบคลุมสูงสุด 90 นาที รองรับ 4 ผู้พูด&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VibeVoice-Realtime-0.5B&lt;/strong&gt;: TTS แบบสตรีมมิ่ง หน่วงต่ำมาก (300ms)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VibeVoice-ASR&lt;/strong&gt;: ถอดความเสียงต่อเนื่องสูงสุด 60 นาที, รองรับ 50+ ภาษา, พร้อมระบุผู้พูด&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F58i5dm06dbwx3no6g0l3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F58i5dm06dbwx3no6g0l3.png" alt="ภาพรวม VibeVoice" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;หลังเปิดตัวมีการควบคุมการใช้โค้ดเพื่อป้องกัน deepfake โดยเสียงที่สร้างจะมีคำเตือนฝังในเสียง และลายน้ำที่ตรวจสอบได้ โมเดล ASR มีให้ใช้งานบน Azure AI Foundry ส่วน TTS ใช้ใบอนุญาต MIT เน้นงานวิจัย&lt;/p&gt;

&lt;p&gt;คู่มือนี้จะสอนการติดตั้ง การสร้างเสียง การรู้จำเสียง การรวม API และการทดสอบปลายทางด้วย &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  VibeVoice ทำงานอย่างไร: ภาพรวมสถาปัตยกรรม
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ความก้าวหน้าของ Tokenizer
&lt;/h3&gt;

&lt;p&gt;จุดเด่นคือ Tokenizer เสียงต่อเนื่องที่ใช้ sampling rate ต่ำมาก 7.5 Hz (เมื่อเทียบกับ 50-100 Hz ของระบบทั่วไป) ทำให้จัดการเสียงยาว (90 นาที) ได้โดยไม่หมดบริบท&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe1xiam4lryl64numns8v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe1xiam4lryl64numns8v.png" alt="VibeVoice Acoustic Tokenizer" width="800" height="431"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjlgehz7za7le23bcs7jd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjlgehz7za7le23bcs7jd.png" alt="VibeVoice Architecture" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ประกอบด้วย Tokenizer สองส่วน:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Acoustic Tokenizer&lt;/strong&gt;: sigma-VAE, ลด sampling rate 3,200 เท่าจาก 24kHz&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic Tokenizer&lt;/strong&gt;: โครงสร้างคล้ายกัน เน้นจับความหมายเชิงภาษา&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  การแพร่กระจายของโทเค็นถัดไป
&lt;/h3&gt;

&lt;p&gt;โมเดลใช้ LLM (Qwen2.5-1.5B) ร่วมกับ Diffusion Head (123M พารามิเตอร์) โดย LLM จัดการบริบท ส่วน Head สร้างรายละเอียดเสียงด้วย DDPM&lt;/p&gt;
&lt;h3&gt;
  
  
  แนวทางการฝึกอบรม
&lt;/h3&gt;

&lt;p&gt;ฝึกแบบ curriculum learning: เริ่มจากลำดับสั้น ขยายเป็น 4K, 16K, 32K, 64K token โดย tokenizer คงที่ อัปเดตเฉพาะ LLM และ Diffusion Head&lt;/p&gt;
&lt;h2&gt;
  
  
  ข้อมูลจำเพาะของโมเดล VibeVoice
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;โมเดล&lt;/th&gt;
&lt;th&gt;พารามิเตอร์&lt;/th&gt;
&lt;th&gt;วัตถุประสงค์&lt;/th&gt;
&lt;th&gt;ความยาวสูงสุด&lt;/th&gt;
&lt;th&gt;ภาษา&lt;/th&gt;
&lt;th&gt;ใบอนุญาต&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;VibeVoice-1.5B&lt;/td&gt;
&lt;td&gt;3B&lt;/td&gt;
&lt;td&gt;ข้อความเป็นคำพูด&lt;/td&gt;
&lt;td&gt;90 นาที&lt;/td&gt;
&lt;td&gt;อังกฤษ, จีน&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VibeVoice-Realtime-0.5B&lt;/td&gt;
&lt;td&gt;~0.5B&lt;/td&gt;
&lt;td&gt;TTS แบบสตรีมมิ่ง&lt;/td&gt;
&lt;td&gt;ระยะยาว&lt;/td&gt;
&lt;td&gt;อังกฤษ, จีน&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VibeVoice-ASR&lt;/td&gt;
&lt;td&gt;~9B&lt;/td&gt;
&lt;td&gt;การรู้จำคำพูด&lt;/td&gt;
&lt;td&gt;60 นาที&lt;/td&gt;
&lt;td&gt;50+ ภาษา&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  VibeVoice-1.5B (TTS)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ข้อมูลจำเพาะ&lt;/th&gt;
&lt;th&gt;ค่า&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LLM พื้นฐาน&lt;/td&gt;
&lt;td&gt;Qwen2.5-1.5B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ความยาวบริบท&lt;/td&gt;
&lt;td&gt;64K โทเค็น&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;จำนวนผู้พูดสูงสุด&lt;/td&gt;
&lt;td&gt;4 คน&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;เอาต์พุตเสียง&lt;/td&gt;
&lt;td&gt;24kHz WAV โมโน&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ประเภท Tensor&lt;/td&gt;
&lt;td&gt;BF16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;รูปแบบ&lt;/td&gt;
&lt;td&gt;Safetensors&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  VibeVoice-ASR
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ข้อมูลจำเพาะ&lt;/th&gt;
&lt;th&gt;ค่า&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;สถาปัตยกรรมพื้นฐาน&lt;/td&gt;
&lt;td&gt;Qwen2.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;พารามิเตอร์&lt;/td&gt;
&lt;td&gt;~9B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ประมวลผลเสียงสูงสุด&lt;/td&gt;
&lt;td&gt;60 นาที&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;อัตราเฟรม&lt;/td&gt;
&lt;td&gt;7.5 Hz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WER เฉลี่ย&lt;/td&gt;
&lt;td&gt;7.77%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ภาษา&lt;/td&gt;
&lt;td&gt;50+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;เอาต์พุต&lt;/td&gt;
&lt;td&gt;โครงสร้าง (ใคร/เมื่อไหร่/อะไร)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;รองรับไฟล์เสียง&lt;/td&gt;
&lt;td&gt;WAV, FLAC, MP3 16kHz+&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  การติดตั้งและตั้งค่า
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ข้อกำหนดเบื้องต้น
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Python 3.8+&lt;/li&gt;
&lt;li&gt;NVIDIA GPU รองรับ CUDA&lt;/li&gt;
&lt;li&gt;VRAM 7-8 GB สำหรับ TTS, 24 GB+ สำหรับ ASR&lt;/li&gt;
&lt;li&gt;RAM 32 GB (64 GB แนะนำสำหรับ ASR)&lt;/li&gt;
&lt;li&gt;CUDA 11.8+ (แนะนำ 12.0+)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ติดตั้ง VibeVoice TTS
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/microsoft/VibeVoice.git
&lt;span class="nb"&gt;cd &lt;/span&gt;VibeVoice
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;โมเดลจะดาวน์โหลดอัตโนมัติเมื่อรันครั้งแรก หรือดาวน์โหลดล่วงหน้าด้วย:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;huggingface_hub&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;snapshot_download&lt;/span&gt;

&lt;span class="nf"&gt;snapshot_download&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;microsoft/VibeVoice-1.5B&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;local_dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./models/VibeVoice-1.5B&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;local_dir_use_symlinks&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ติดตั้งผ่าน pip (แพ็คเกจชุมชน)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;vibevoice
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ติดตั้งสำหรับ ASR
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/microsoft/VibeVoice.git
&lt;span class="nb"&gt;cd &lt;/span&gt;VibeVoice
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements-asr.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;หรือใช้บน Azure AI Foundry สำหรับ inference คลาวด์&lt;/p&gt;

&lt;h2&gt;
  
  
  การสร้างเสียงพูดด้วย VibeVoice-1.5B
&lt;/h2&gt;

&lt;h3&gt;
  
  
  สร้างเสียงพูดจากผู้พูดคนเดียว
&lt;/h3&gt;

&lt;p&gt;เตรียมไฟล์ข้อความ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Alice: Welcome to the Apidog developer podcast. Today we're covering API testing strategies for 2026.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;รันคำสั่ง:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python VibeVoice &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--model_path&lt;/span&gt; microsoft/VibeVoice-1.5B &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--txt_path&lt;/span&gt; script.txt &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--speaker_names&lt;/span&gt; Alice &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--cfg_scale&lt;/span&gt; 1.5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เอาต์พุตจะได้ไฟล์ &lt;code&gt;.wav&lt;/code&gt; ในโฟลเดอร์ &lt;code&gt;outputs/&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  สร้างพอดแคสต์หลายผู้พูด
&lt;/h3&gt;

&lt;p&gt;รองรับสูงสุด 4 ผู้พูด:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Alice: Welcome back to the show. Today we have two API experts joining us.
Bob: Thanks for having me. I've been working on REST API design patterns for the past five years.
Carol: And I focus on GraphQL performance optimization. Happy to be here.
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python VibeVoice &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--model_path&lt;/span&gt; microsoft/VibeVoice-1.5B &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--txt_path&lt;/span&gt; podcast_script.txt &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--speaker_names&lt;/span&gt; Alice Bob Carol &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--cfg_scale&lt;/span&gt; 1.5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  การโคลนเสียง (Zero-shot)
&lt;/h3&gt;

&lt;p&gt;ไฟล์อ้างอิง:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;.wav (โมโน), 24kHz, 30–60 วินาที&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;แปลงไฟล์:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ffmpeg &lt;span class="nt"&gt;-i&lt;/span&gt; source_recording.m4a &lt;span class="nt"&gt;-ar&lt;/span&gt; 24000 &lt;span class="nt"&gt;-ac&lt;/span&gt; 1 reference_voice.wav
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เปิด Gradio demo UI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python demo/gradio_demo.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;แล้วอัปโหลดเสียง/โคลนเสียงที่ UI: &lt;code&gt;http://127.0.0.1:7860&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  สตรีมด้วย VibeVoice-Realtime-0.5B
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python demo/streaming_inference_from_file.py &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--model_path&lt;/span&gt; microsoft/VibeVoice-Realtime-0.5B &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--txt_path&lt;/span&gt; script.txt &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--speaker_name&lt;/span&gt; Alice
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Realtime เหมาะกับงานโต้ตอบสด, ความเที่ยงตรงน้อยกว่า 1.5B แต่เร็วกว่า&lt;/p&gt;

&lt;h2&gt;
  
  
  การใช้ VibeVoice กับ Python
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Pipeline API
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;transformers&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pipeline&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;huggingface_hub&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;snapshot_download&lt;/span&gt;

&lt;span class="n"&gt;model_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;snapshot_download&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;microsoft/VibeVoice-1.5B&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;pipe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;pipeline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text-to-speech&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;model_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;no_processor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;script&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Alice&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;How do you handle API versioning?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bob&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;We use URL path versioning. v1, v2, and so on.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;input_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pipe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;processor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;apply_chat_template&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;script&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;generate_kwargs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cfg_scale&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;1.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;n_diffusion_steps&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;pipe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;generate_kwargs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;generate_kwargs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  FastAPI wrapper สำหรับการใช้งานจริง
&lt;/h3&gt;

&lt;p&gt;มี FastAPI wrapper ให้เรียกใช้งาน API แบบ OpenAI-compatible:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/ncoder-ai/VibeVoice-FastAPI.git
&lt;span class="nb"&gt;cd &lt;/span&gt;VibeVoice-FastAPI
docker compose up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ทดสอบ API:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST http://localhost:8000/v1/audio/speech &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "vibevoice-1.5b",
    "input": "Your API documentation should be a conversation, not a monologue.",
    "voice": "alice"
  }'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output&lt;/span&gt; speech.wav
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;API นี้สามารถทดสอบผ่าน &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; ได้ทันทีด้วยฟอร์แมตเดียวกับ OpenAI TTS API&lt;/p&gt;

&lt;h2&gt;
  
  
  การใช้ VibeVoice-ASR สำหรับการรู้จำคำพูด
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ถอดความเบื้องต้น
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python asr_inference.py &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--model_path&lt;/span&gt; microsoft/VibeVoice-ASR &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--audio_path&lt;/span&gt; meeting_recording.wav
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  เอาต์พุตที่มีโครงสร้าง
&lt;/h3&gt;

&lt;p&gt;ASR ออกผลลัพธ์แบบ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"segments"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"speaker"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Speaker 1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"end"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Let's review the API endpoints for the new release."&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ASR เป็นเซิร์ฟเวอร์ MCP
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;vibevoice-mcp-server
vibevoice-mcp serve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เชื่อมต่อกับ Claude Code, Cursor หรือ AI coding tools อื่น ๆ ได้โดยตรง&lt;/p&gt;

&lt;h3&gt;
  
  
  เมื่อใดควรใช้ VibeVoice-ASR เทียบกับ Whisper
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;กรณีใช้งาน&lt;/th&gt;
&lt;th&gt;ตัวเลือกที่ดีที่สุด&lt;/th&gt;
&lt;th&gt;เหตุผล&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ประชุมยาว (30-60 นาที)&lt;/td&gt;
&lt;td&gt;VibeVoice-ASR&lt;/td&gt;
&lt;td&gt;ประมวลผล 60 นาที, ระบุผู้พูด&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;สัมภาษณ์หลายผู้พูด&lt;/td&gt;
&lt;td&gt;VibeVoice-ASR&lt;/td&gt;
&lt;td&gt;แยกผู้พูดอัตโนมัติ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;พอดแคสต์ต้องการ timestamp&lt;/td&gt;
&lt;td&gt;VibeVoice-ASR&lt;/td&gt;
&lt;td&gt;เอาต์พุตโครงสร้าง ใคร/เมื่อ/อะไร&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;เนื้อหาหลายภาษา (50+ ภาษา)&lt;/td&gt;
&lt;td&gt;VibeVoice-ASR&lt;/td&gt;
&lt;td&gt;รองรับหลายภาษากว่า&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;คลิปสั้น/เสียงรบกวนมาก&lt;/td&gt;
&lt;td&gt;Whisper&lt;/td&gt;
&lt;td&gt;ทนเสียงรบกวนดีกว่า&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ติดตั้ง edge/mobile&lt;/td&gt;
&lt;td&gt;Whisper&lt;/td&gt;
&lt;td&gt;ขนาดเล็ก รองรับอุปกรณ์หลากหลาย&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ภาษาเฉพาะทาง (ไม่ใช่อังกฤษ)&lt;/td&gt;
&lt;td&gt;Whisper&lt;/td&gt;
&lt;td&gt;ปรับแต่งหลายภาษาได้ดีกว่า&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  การทดสอบ Voice AI API ด้วย Apidog
&lt;/h2&gt;

&lt;p&gt;Apidog ช่วยทดสอบและ debug การรวม API Voice AI ได้อย่างรวดเร็ว ไม่ว่าจะเป็น FastAPI wrapper, Azure AI Foundry หรือ API ของคุณเอง&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fli6pz3gt8p7jna3g791g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fli6pz3gt8p7jna3g791g.png" alt="ทดสอบ Voice AI API ด้วย Apidog" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ทดสอบปลายทาง TTS
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;สร้าง POST request ใหม่ใน Apidog ไปยัง VibeVoice FastAPI server&lt;/li&gt;
&lt;li&gt;ตั้งค่า body เป็น JSON:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"vibevoice-1.5b"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"input"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Test speech synthesis with proper intonation and pacing."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"voice"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"alice"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"response_format"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"wav"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;ตรวจสอบ header ตอบกลับ &lt;code&gt;audio/wav&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;ดาวน์โหลดไฟล์ WAV และฟังเสียง&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  ทดสอบปลายทาง ASR
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;สร้าง POST request แบบ &lt;code&gt;multipart/form-data&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;แนบไฟล์เสียงในฟิลด์ฟอร์ม&lt;/li&gt;
&lt;li&gt;ตรวจสอบ JSON ตอบกลับว่ามี speaker ID, timestamp, transcription&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  ตรวจสอบสัญญา Audio API
&lt;/h3&gt;

&lt;p&gt;Apidog รองรับทั้ง binary upload (ASR) และ JSON (TTS) สามารถ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;อัปโหลดไฟล์เสียง&lt;/li&gt;
&lt;li&gt;จัดรูปแบบ JSON&lt;/li&gt;
&lt;li&gt;ตรวจสอบ response โครงสร้าง&lt;/li&gt;
&lt;li&gt;สลับ environment (local/cloud)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ดาวน์โหลด Apidog เพื่อทดสอบระบบ Voice AI ของคุณก่อน deploy จริง&lt;/p&gt;

&lt;h2&gt;
  
  
  ความปลอดภัยและการใช้งานอย่างรับผิดชอบ
&lt;/h2&gt;

&lt;p&gt;มาตรการของ Microsoft:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;คำเตือน AI ฝังในเสียง&lt;/strong&gt;: “ส่วนนี้สร้างโดย AI”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ลายน้ำที่มองไม่เห็น&lt;/strong&gt;: สำหรับตรวจสอบแหล่งที่มา&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;บันทึกการอนุมาน&lt;/strong&gt;: hash log สำหรับตรวจจับ misuse&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MIT License&lt;/strong&gt;: ใช้เชิงพาณิชย์ได้ แต่ควรทดสอบก่อน production&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  สิ่งที่ได้รับอนุญาต
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;วิจัย/วิชาการ&lt;/li&gt;
&lt;li&gt;สร้างต้นแบบ/ทดสอบในองค์กร&lt;/li&gt;
&lt;li&gt;พอดแคสต์ (เปิดเผยว่าใช้ AI)&lt;/li&gt;
&lt;li&gt;แอปเพื่อการเข้าถึง (TTS สำหรับผู้พิการ)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  สิ่งที่ไม่ได้รับอนุญาต
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;แอบอ้างเสียงโดยไม่ยินยอม&lt;/li&gt;
&lt;li&gt;Deepfake/นำเสนอเสียง AI เป็นของจริง&lt;/li&gt;
&lt;li&gt;แปลงเสียงสดแบบเรียลไทม์ในแอป deepfake&lt;/li&gt;
&lt;li&gt;สร้างเสียงที่ไม่ใช่ speech (เพลง, เอฟเฟกต์)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ข้อจำกัดที่ควรรู้
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TTS ยังรองรับแค่ อังกฤษ/จีน&lt;/strong&gt; ภาษาอื่นผลลัพธ์จะไม่ดี ASR รองรับ 50+ ภาษา&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ASR ต้องใช้ VRAM 24GB+&lt;/strong&gt; (A100/H100) TTS ใช้ GPU ระดับ consumer ได้&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TTS ไม่รองรับพูดทับกัน&lt;/strong&gt; ทุกการพูดจะสลับกัน&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;โมเดลมี bias&lt;/strong&gt; อาจมีเนื้อหาผิดพลาด/ลำเอียง&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ซอฟต์แวร์ระดับวิจัย&lt;/strong&gt; อาจมี bug/error ใน edge case&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd0b9400p7l603jorv293.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd0b9400p7l603jorv293.png" alt="ข้อจำกัด VibeVoice" width="800" height="1024"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  การติดตั้งใช้งาน VibeVoice-ASR บน Azure AI Foundry
&lt;/h2&gt;

&lt;p&gt;ถ้าไม่ต้องการดูแล GPU เอง ใช้ VibeVoice-ASR บน Azure AI Foundry ได้ มี API endpoint ที่จัดการ scaling, update, maintenance ให้&lt;/p&gt;

&lt;p&gt;ขั้นตอน:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ตรวจสอบ model catalog ของ Azure AI Foundry&lt;/li&gt;
&lt;li&gt;กำหนดค่า endpoint/authorization ใน Apidog&lt;/li&gt;
&lt;li&gt;ทดสอบ transcription กับไฟล์เสียงตัวอย่าง&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ชุมชนและระบบนิเวศ
&lt;/h2&gt;

&lt;p&gt;VibeVoice มี community ecosystem ที่แข็งแกร่ง:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ดาวน์โหลด HuggingFace 62,630+/เดือน&lt;/strong&gt; สำหรับ 1.5B&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;12 โมเดล custom&lt;/strong&gt; จากชุมชน&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;79+ HuggingFace Spaces&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;4 แบบ quantized&lt;/strong&gt; สำหรับ VRAM ต่ำ&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;forks ชุมชน&lt;/strong&gt;: &lt;code&gt;vibevoice-community/VibeVoice&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;โปรเจกต์ชุมชนเด่น:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VibeVoice-FastAPI&lt;/strong&gt;: REST API พร้อม Docker&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VibeVoice MCP Server&lt;/strong&gt;: เชื่อม coding AI tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apple Silicon support&lt;/strong&gt;: สคริปต์ inference บน Mac M&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quantized models&lt;/strong&gt;: GGUF ฯลฯ&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  คำถามที่พบบ่อย
&lt;/h2&gt;

&lt;h3&gt;
  
  
  VibeVoice ใช้งานฟรีหรือไม่?
&lt;/h3&gt;

&lt;p&gt;ฟรี โมเดลทั้งหมด MIT license ใช้เชิงพาณิชย์ได้ (แต่ inference บน Azure AI Foundry มีค่าใช้จ่าย)&lt;/p&gt;

&lt;h3&gt;
  
  
  VibeVoice ใช้บน Apple Silicon Mac ได้ไหม?
&lt;/h3&gt;

&lt;p&gt;มีสคริปต์ชุมชนสำหรับ inference บน Mac M-series ประสิทธิภาพช้ากว่า CUDA GPU แต่ใช้งานได้&lt;/p&gt;

&lt;h3&gt;
  
  
  VibeVoice เทียบกับ ElevenLabs ยังไง?
&lt;/h3&gt;

&lt;p&gt;VibeVoice รันโลคอล ฟรี ไม่มีข้อมูลออกนอกเครื่อง ElevenLabs คุณภาพเสียงดีกว่า ตั้งค่าง่ายกว่า แต่ต้องจ่ายและข้อมูลออกคลาวด์&lt;/p&gt;

&lt;h3&gt;
  
  
  เหตุใด GitHub repo จึงถูกปิดชั่วคราว?
&lt;/h3&gt;

&lt;p&gt;Microsoft พบ misuse (โคลนเสียง/สร้าง deepfake) จึงปิดชั่วคราว เพิ่มฟีเจอร์ความปลอดภัย แล้วเปิดใหม่ ชุมชน fork พัฒนาโค้ดต่อเนื่อง&lt;/p&gt;

&lt;h3&gt;
  
  
  ปรับแต่ง VibeVoice ด้วยเสียง custom ได้ไหม?
&lt;/h3&gt;

&lt;p&gt;ได้ มีโมเดล custom 12 รูปแบบบน HuggingFace ต้องใช้ตัวอย่างเสียง 30–60 วินาที + GPU สำหรับเทรน&lt;/p&gt;

&lt;h3&gt;
  
  
  VibeVoice เอาต์พุตไฟล์เสียงแบบไหน?
&lt;/h3&gt;

&lt;p&gt;WAV 24kHz โมโน แปลงเป็น MP3/OGG/FLAC ด้วย ffmpeg ได้&lt;/p&gt;

&lt;h3&gt;
  
  
  ใช้ VibeVoice-ASR แทน Whisper ได้ไหม?
&lt;/h3&gt;

&lt;p&gt;สำหรับไฟล์ยาว/หลายผู้พูด/หลายภาษา VibeVoice-ASR ดีกว่า Whisper (Whisper เหมาะคลิปสั้น, เสียงรบกวน, ติดตั้ง edge/mobile)&lt;/p&gt;

&lt;h3&gt;
  
  
  VibeVoice รองรับสนทนาเสียงเรียลไทม์หรือไม่?
&lt;/h3&gt;

&lt;p&gt;Realtime-0.5B รองรับ input streaming latency ~300ms เหมาะงาน quasi-realtime แต่ไม่ใช่ full-duplex voice chat&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;ดาวน์โหลด Apidog เพื่อทดสอบระบบ Voice AI ของคุณวันนี้&lt;/strong&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
