<?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: Tectura Japan | DX</title>
    <description>The latest articles on DEV Community by Tectura Japan | DX (tecturajpndx).</description>
    <link>https://dev.to/tecturajpndx</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F13534%2F228289e2-62fc-4e7c-9c4e-d230bc9f960c.png</url>
      <title>DEV Community: Tectura Japan | DX</title>
      <link>https://dev.to/tecturajpndx</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tecturajpndx"/>
    <language>en</language>
    <item>
      <title>Customizing D365 Sales — For Our Own Sales Team (Customer Zero) Preparation</title>
      <dc:creator>Miwa J</dc:creator>
      <pubDate>Tue, 30 Jun 2026 03:12:16 +0000</pubDate>
      <link>https://dev.to/tecturajpndx/customizing-d365-sales-for-our-own-sales-team-customer-zero-preparation-56f9</link>
      <guid>https://dev.to/tecturajpndx/customizing-d365-sales-for-our-own-sales-team-customer-zero-preparation-56f9</guid>
      <description>&lt;h2&gt;
  
  
  What is Customer Zero?
&lt;/h2&gt;

&lt;p&gt;"Customer Zero" is a strategy used by IT and technology companies in which the company itself becomes the "0th customer" (a test monitor) for a new product, AI service, or cloud service before rolling it out to external customers.&lt;/p&gt;

&lt;p&gt;Key benefits: faster validation and improvement (using the product in a real working environment surfaces bugs and usability issues early), and more persuasive sales pitches (a proven in-house success story/use case lets you propose to clients with confidence).&lt;/p&gt;

&lt;p&gt;With that in mind, the DX team has kicked off an initiative to get our own sales team using D365 Sales more fully.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scope
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Zone&lt;/th&gt;
&lt;th&gt;Content&lt;/th&gt;
&lt;th&gt;Implementation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Zone A&lt;/td&gt;
&lt;td&gt;Auto-generated Next Actions / detecting stalled deals&lt;/td&gt;
&lt;td&gt;Power Automate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zone B&lt;/td&gt;
&lt;td&gt;Opportunity velocity monitoring / large-deal alerts&lt;/td&gt;
&lt;td&gt;Power Automate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zone C&lt;/td&gt;
&lt;td&gt;Customer health management / churn prevention / renewal alerts&lt;/td&gt;
&lt;td&gt;Power Automate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zone D&lt;/td&gt;
&lt;td&gt;Document flow / chained tasks&lt;/td&gt;
&lt;td&gt;Power Automate + BPF&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Implementation Order
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Create custom fields (12 on Opportunity, 6 on Account)&lt;/li&gt;
&lt;li&gt;4 internal-processing Power Automate flows (write-back portions of A-4, C-5, C-6, D-3)&lt;/li&gt;
&lt;li&gt;3 Zone A alert flows (A-1, A-2, A-3)&lt;/li&gt;
&lt;li&gt;3 Zone B alert flows (B-1, B-2, B-3)&lt;/li&gt;
&lt;li&gt;6 Zone C alert flows (C-1–C-6)&lt;/li&gt;
&lt;li&gt;4 Zone D document flows (D-1–D-4)&lt;/li&gt;
&lt;li&gt;Enable and verify the Outlook Add-in&lt;/li&gt;
&lt;li&gt;Reorganize dashboard views&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  1. Creating Custom Fields (12 on Opportunity, 6 on Account)
&lt;/h2&gt;

&lt;p&gt;Custom fields are added from Power Apps using the following steps.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Details&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Open Power Apps&lt;/td&gt;
&lt;td&gt;Go to make.powerapps.com and select the target environment (sandbox)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Select the table&lt;/td&gt;
&lt;td&gt;Left menu "Tables" → select "Opportunity"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Add a column&lt;/td&gt;
&lt;td&gt;"Columns" tab → click "Add column"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Enter field info&lt;/td&gt;
&lt;td&gt;Enter display name, data type, and schema name (cr917_xxxxx), then save&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Do the same for Account&lt;/td&gt;
&lt;td&gt;Add the corresponding fields to the "Account" table the same way (also create the Initiative ② additional fields using the same steps)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Configure choices&lt;/td&gt;
&lt;td&gt;For cr917_customer_type, add a "new choice" with the two options "License-continuation type" and "Project type"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Add to forms&lt;/td&gt;
&lt;td&gt;Open the main form for each table, add the new fields, then save and publish&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Fields added to the Opportunity entity
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Note: prefixes like &lt;code&gt;cr917_&lt;/code&gt; vary by environment.&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field Name&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Input Method&lt;/th&gt;
&lt;th&gt;Purpose / Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Proposal Sent &lt;code&gt;cr917_proposal_sent&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Yes/No (Boolean)&lt;/td&gt;
&lt;td&gt;Manual (rep)&lt;/td&gt;
&lt;td&gt;Checked by the rep when the proposal is sent. Trigger condition for Zone D-1 flow.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PO Received &lt;code&gt;cr917_po_received&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Yes/No (Boolean)&lt;/td&gt;
&lt;td&gt;Manual (rep)&lt;/td&gt;
&lt;td&gt;Checked when the PO is received. Trigger condition for Zone D-2 flow.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Invoice Sent &lt;code&gt;cr917_invoice_sent&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Yes/No (Boolean)&lt;/td&gt;
&lt;td&gt;Manual (rep)&lt;/td&gt;
&lt;td&gt;Checked when the invoice is issued. Flow D-3 auto-sets &lt;code&gt;cr917_invoice_date&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Acceptance Confirmed &lt;code&gt;cr917_acceptance_done&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Yes/No (Boolean)&lt;/td&gt;
&lt;td&gt;Manual (rep)&lt;/td&gt;
&lt;td&gt;Final completion flag. If left unchecked for 30 days, flow D-4 generates a reminder task.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Invoice Date &lt;code&gt;cr917_invoice_date&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Date and Time&lt;/td&gt;
&lt;td&gt;PA auto (D-3)&lt;/td&gt;
&lt;td&gt;PA automatically records the date &lt;code&gt;cr917_invoice_sent&lt;/code&gt; became Yes. Used as the baseline date for the 30-day acceptance check.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stage Changed Date &lt;code&gt;cr917_stage_changed_date&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Date and Time&lt;/td&gt;
&lt;td&gt;PA auto (A-4)&lt;/td&gt;
&lt;td&gt;PA updates this with the current date/time every time the stage changes. Used for stall-day calculations in flows A-1 and B-1.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NDA Status &lt;code&gt;cr917_nda_status&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Option Set&lt;/td&gt;
&lt;td&gt;Manual (rep)&lt;/td&gt;
&lt;td&gt;For ① NDA Signing. Three choices: Not Submitted / Under Review / Complete. PA monitors status changes to advance the flow.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NDA SharePoint URL &lt;code&gt;cr917_nda_sharepoint_url&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Text&lt;/td&gt;
&lt;td&gt;PA auto&lt;/td&gt;
&lt;td&gt;For ① NDA Signing. After signing completes, PA automatically writes in the SharePoint storage URL.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WBS Approved &lt;code&gt;cr917_wbs_approved&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Yes/No (Boolean)&lt;/td&gt;
&lt;td&gt;Manual (rep)&lt;/td&gt;
&lt;td&gt;For ⑤ Offering. Checked once WBS approval is complete. PA then advances to the order-registration step.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Order Registered &lt;code&gt;cr917_order_registered&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Yes/No (Boolean)&lt;/td&gt;
&lt;td&gt;Manual (rep)&lt;/td&gt;
&lt;td&gt;For ⑤ Offering. Order-registration completion flag. Checking it generates the flow-completion task.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Payment Confirmed &lt;code&gt;cr917_payment_confirmed&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Yes/No (Boolean)&lt;/td&gt;
&lt;td&gt;Manual (rep)&lt;/td&gt;
&lt;td&gt;Shared by ④⑥ Renewal/Inspection. Checked after payment is confirmed. If unconfirmed 60 days after invoicing, an alert fires.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SP Registered &lt;code&gt;cr917_sp_registered&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Yes/No (Boolean)&lt;/td&gt;
&lt;td&gt;Manual (rep)&lt;/td&gt;
&lt;td&gt;For ⑥ Delivery Inspection. Flag for completed SharePoint registration of deliverables. PA checks this as a precondition before triggering invoicing.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Fields added to the Account entity
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field Name&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Input Method&lt;/th&gt;
&lt;th&gt;Purpose / Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Renewal Date &lt;code&gt;cr917_renewal_date&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;td&gt;PA auto + manual override&lt;/td&gt;
&lt;td&gt;PA auto-sets this to close date + 365 days on a Won close. Rep may optionally adjust it. Baseline date for flows C-3/C-4.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Last Activity Date &lt;code&gt;cr917_last_activity_date&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Date and Time&lt;/td&gt;
&lt;td&gt;PA auto (C-6)&lt;/td&gt;
&lt;td&gt;PA updates this to the current date/time whenever a completed activity (call, email, visit, CI-J integration) is created. Baseline date for A-2, C-1, C-2.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customer Type &lt;code&gt;cr917_customer_type&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Option Set&lt;/td&gt;
&lt;td&gt;Manual (rep)&lt;/td&gt;
&lt;td&gt;5 choices: License-continuation / Project / Support (spot) / Support (term contract) / Support (time-purchase). 60-day group: License-continuation, Support (term contract). 90-day group: Project, Support (spot), Support (time-purchase).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BC Registered &lt;code&gt;cr917_bc_registered&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Yes/No (Boolean)&lt;/td&gt;
&lt;td&gt;Manual (rep)&lt;/td&gt;
&lt;td&gt;For ② Partner Contract. Rep records completion of Business Central registration. Interim flag pending full BC integration.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contract SharePoint URL &lt;code&gt;cr917_contract_sharepoint_url&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Text&lt;/td&gt;
&lt;td&gt;PA auto&lt;/td&gt;
&lt;td&gt;For ② Partner Contract. After the contract is signed, PA automatically writes in the SharePoint storage URL.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PO Number &lt;code&gt;cr917_po_number&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Text&lt;/td&gt;
&lt;td&gt;Manual (rep)&lt;/td&gt;
&lt;td&gt;For ③ PO Issuance. Rep enters the PO number when it's received; used for reconciliation at invoicing time.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>dynamics365</category>
      <category>powerautomate</category>
      <category>powerapps</category>
      <category>sfa</category>
    </item>
    <item>
      <title>What I Learned from Building an AI Agent in Copilot Studio: 3 Design Points That Helped It Work as Expected</title>
      <dc:creator>Sugiyama Yuki</dc:creator>
      <pubDate>Tue, 30 Jun 2026 03:04:31 +0000</pubDate>
      <link>https://dev.to/tecturajpndx/what-i-learned-from-building-an-ai-agent-in-copilot-studio-3-design-points-that-helped-it-work-as-km7</link>
      <guid>https://dev.to/tecturajpndx/what-i-learned-from-building-an-ai-agent-in-copilot-studio-3-design-points-that-helped-it-work-as-km7</guid>
      <description>&lt;p&gt;AI agents are getting a lot of attention these days, but are they really easy to build the way we expect?&lt;/p&gt;

&lt;p&gt;Tools like Claude Code make it possible to create agents very intuitively. However, in a real company environment, we often cannot use such tools freely because of permission, governance, or security restrictions.&lt;/p&gt;

&lt;p&gt;In my case, Copilot Studio was one of the few AI tools I could realistically use in a business environment. So I started building an AI agent with it.&lt;/p&gt;

&lt;p&gt;But once I actually started building, I ran into issues like these:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It was harder to build than I expected.&lt;/li&gt;
&lt;li&gt;I created the flow step by step, but it did not behave the way I designed it.&lt;/li&gt;
&lt;li&gt;I wanted to combine several functions into one chat, but the branching did not work well.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At first glance, Copilot Studio looks like a tool that lets you build flows easily. However, after working with it, I realized that unless the design is clear, the agent can easily behave in unexpected ways.&lt;/p&gt;

&lt;p&gt;In this article, I want to share three design points I learned while building an AI agent in Copilot Studio.&lt;/p&gt;

&lt;p&gt;The second and third points were especially important in my case. If you are struggling to make your Copilot Studio agent work as expected, these points may help.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three Design Points for Building a Copilot Studio AI Agent
&lt;/h2&gt;

&lt;p&gt;From my experience, the following three points are important when designing an AI agent in Copilot Studio:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clarify what you want the agent to do before creating the flow.&lt;/li&gt;
&lt;li&gt;Create a separate topic for each task.&lt;/li&gt;
&lt;li&gt;Write prompts in English.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Point 1: Clarify What You Want the Agent to Do Before Creating the Flow
&lt;/h2&gt;

&lt;p&gt;Before building the flow, I think it is important to define which business task you want the AI agent to handle and how the task should be processed.&lt;/p&gt;

&lt;p&gt;If you have used Copilot Studio before, you probably know that there are many different types of nodes, or action boxes.&lt;/p&gt;

&lt;p&gt;For example, you can create variables, call generative AI, create conditions, branch the flow, call actions, and so on. Some features are not immediately obvious, and if you start building while thinking through the design at the same time, it is very easy to lose time.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgcsmpmgyja6otiilultx.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgcsmpmgyja6otiilultx.png" alt=" " width="745" height="613"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Even in this screen alone, there are more than 10 visible functions.&lt;/p&gt;

&lt;p&gt;What I realized is that building a useful AI agent is not about understanding every single function in Copilot Studio.&lt;/p&gt;

&lt;p&gt;The more important skill is being able to choose the right functions for the task you want to automate.&lt;/p&gt;

&lt;p&gt;The process that worked better for me was:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;First, write down the business task and its steps.&lt;/li&gt;
&lt;li&gt;Send the task and steps to ChatGPT, Copilot, or another AI tool, and ask how the flow should be designed.&lt;/li&gt;
&lt;li&gt;Build only the necessary parts in Copilot Studio while checking the design step by step.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This approach helped me avoid randomly adding nodes without a clear reason.&lt;/p&gt;

&lt;h2&gt;
  
  
  Point 2: Create a Separate Topic for Each Task
&lt;/h2&gt;

&lt;p&gt;Another thing I learned is that it is better to create one topic for one task or function.&lt;/p&gt;

&lt;p&gt;When building an AI agent, it is tempting to add many features into a single topic. You may want one topic to receive a request, understand the user’s intent, extract data, confirm the result, call an external system, and complete the registration.&lt;/p&gt;

&lt;p&gt;However, in my experience, the more tasks and branches I added into one topic, the more unstable the flow became.&lt;/p&gt;

&lt;p&gt;This is not only about Copilot Studio. Generative AI and AI agents in general are not always good at handling many different tasks at the same time. When one topic becomes too large, the agent may fail to choose the right path or may repeat the same step again.&lt;/p&gt;

&lt;p&gt;To avoid this, I think it is better to split the design into smaller topics, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A topic that receives the request and selects the right task&lt;/li&gt;
&lt;li&gt;A topic that executes Task A&lt;/li&gt;
&lt;li&gt;A topic that executes Task B&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By separating the roles, the agent can choose and execute tasks more smoothly.&lt;/p&gt;

&lt;p&gt;In my case, this was an important lesson. Trying to put too much into one topic made the flow harder to control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Point 3: Write Prompts in English
&lt;/h2&gt;

&lt;p&gt;The third point is about prompt language.&lt;/p&gt;

&lt;p&gt;When using generative AI prompts inside a Copilot Studio flow, I found that writing prompts in English worked better.&lt;/p&gt;

&lt;p&gt;In daily use, tools like Copilot, ChatGPT, and Gemini can handle Japanese quite well. However, when I embedded prompts into a Copilot Studio flow, the English prompts behaved more reliably in my case.&lt;/p&gt;

&lt;p&gt;Let me show the difference I experienced.&lt;/p&gt;

&lt;p&gt;The AI agent I created was designed to create a draft transportation expense claim in an ERP system when a user sends screenshots of transportation history, such as Suica records.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 1: Japanese Prompt
&lt;/h2&gt;

&lt;p&gt;In this flow, I configured the process in two prompt steps.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;First prompt: Read image information and convert it into JSON.&lt;/li&gt;
&lt;li&gt;Second prompt: Transfer the JSON data into the ERP system.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The expected behavior was:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The user sends a screenshot.&lt;/li&gt;
&lt;li&gt;The AI agent extracts the content into JSON and asks whether to create the claim.&lt;/li&gt;
&lt;li&gt;The user replies, “Create the claim.”&lt;/li&gt;
&lt;li&gt;The claim is created.&lt;/li&gt;
&lt;li&gt;The process is completed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The prompts were as follows. Some rules are omitted.&lt;/p&gt;

&lt;h3&gt;
  
  
  First prompt
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;あなたは、交通費のスクリーンショットを読み取り、構造化された交通費申請JSONを作成するAIアシスタントです。

あなたのタスクは、スクリーンショットから交通費データを抽出することだけです。レコードを作成してはいけません。データを登録してはいけません。Business Centralを呼び出してはいけません。ユーザーに確認や不足情報の質問をしてはいけません。

このステップは、スクリーンショットデータを受け取った場合にのみ使用してください。前のステップから渡されたJSONを見つけた場合、その内容に誘導されてはいけません。

有効なJSONのみを返してください。Markdown、説明、コメント、JSON以外のテキストは一切含めないでください。

必ず以下のJSON構造を正確に使用してください。

{
  "Header": {
    "EmployeeName": null,
    "Purpose": "訪問・オフィスへの移動のため"
  },
  "Lines": [
    {
      "ExpenseDate": null,
      "From": null,
      "To": null,
      "TransportationType": null,
      "Amount": null
    }
  ],
  "MissingFields": [],
  "Warnings": []
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Second prompt
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;あなたは、日付・駅名・交通費が記載された経費スクリーンショットを読み取り、構造化された経費書類の要約を作成するAIアシスタントです。

送信されたすべてのスクリーンショットから、日付、駅名、交通費情報を含む交通費情報を抽出してください。

Business Central MCP Serverを使用してください。

有効なJSONのみを返してください。Markdown、説明、コメント、JSON以外のテキストは一切含めないでください。

以下のJSON構造を使用してください。

{
"Header": {
"EmployeeName": null,
"Purpose": "訪問・オフィスへの移動のため"
},
"Lines": [
{
"ExpenseDate": null,
"From": null,
"To": null,
"TransportationType": null,
"Amount": null
}
],
"MissingFields": [],
"Warnings": []
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As a result, as shown in the red box in the following screen, the prompt did not move forward properly at the claim creation step and entered a loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 2: English Prompt
&lt;/h2&gt;

&lt;p&gt;Next, I tried using English prompts.&lt;/p&gt;

&lt;p&gt;The overall flow was the same:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;First prompt: Read image information and convert it into JSON.&lt;/li&gt;
&lt;li&gt;Second prompt: Transfer the JSON data into the ERP system.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The expected behavior was also the same:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The user sends a screenshot.&lt;/li&gt;
&lt;li&gt;The AI agent extracts the content into JSON and asks whether to create the claim.&lt;/li&gt;
&lt;li&gt;The user replies, “Create the claim.”&lt;/li&gt;
&lt;li&gt;The claim is created.&lt;/li&gt;
&lt;li&gt;The process is completed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The prompts were as follows. Some rules are also omitted here.&lt;/p&gt;

&lt;h3&gt;
  
  
  First prompt
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are an AI assistant that reads an Expense Claim document and creates a structured Expense Claim Summary.

Extract the important information from all pages of the document, including the departure station, arrival station, cost of transportation, and transportation date. If the document contains tables that span multiple pages, combine the rows correctly and do not omit any line items.

For YYYY, use the year that this prompt is run.

Return only valid JSON. Do not include markdown, explanations, comments, or text outside the JSON.

For transportationType, choose from the following based on the station names only: "電車", "地下鉄", "バス", "その他".

Use the following JSON structure:

{{
"headerActionName": "null",
"headerRequest": {{
"employeeNo": "TEST",
"claimDate": "null",
"purpose": "交通費精算のため",
"remarks": "AI Foundry MCP OCR Test"
}},
"lineActionName": "null",
"lineRequests": [
{{
"expenseDate": "null",
"fromLocation": "null",
"toLocation": "null",
"transportationType": "電車/地下鉄/バス/その他",
"description": "交通費",
"amount": 0
}}
]
}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Second prompt
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;If you receive a photo with station or bus stop names, dates, and costs, use the TravelExpenseFlow topic to extract the expense claim details.

Search for the required information in Business Central using the Business Central MCP Server.

If the required information is found, use the analyzed expense claim details to create an Expense Claim in Business Central.

Use the analyzed line items to create expense claim lines. For each analyzed line, search for the corresponding required information in Business Central using the Business Central MCP Server.

Do not create the Expense Claim until all required information and line items have been identified and confirmed.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As a result, as shown in the following screen, the claim was created successfully.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2kb14nwcq9htbpo6s0qy.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2kb14nwcq9htbpo6s0qy.png" alt=" " width="800" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this case, simply changing the prompt language improved the behavior.&lt;/p&gt;

&lt;p&gt;Of course, this does not mean that English prompts will always solve every issue. The topic design, branching logic, variables, and action settings are also important.&lt;/p&gt;

&lt;p&gt;However, based on what I experienced, when using prompts inside Copilot Studio flows, it is worth writing the prompt in Japanese first and then translating it into English before embedding it into the flow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;In this article, I shared three design points I learned while building an AI agent in Copilot Studio.&lt;/p&gt;

&lt;p&gt;The three points were:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clarify what you want the agent to do before creating the flow.&lt;/li&gt;
&lt;li&gt;Create a separate topic for each task.&lt;/li&gt;
&lt;li&gt;Write prompts in English.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There are many other things to consider when building agents in Copilot Studio. However, in my case, just keeping these three points in mind made the flow easier to design and helped the agent behave closer to what I expected.&lt;/p&gt;

&lt;p&gt;If your Copilot Studio agent does not work the way you expect, it may be worth reviewing these three points first.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>copilotstudio</category>
      <category>powerplatform</category>
      <category>automation</category>
    </item>
  </channel>
</rss>
