<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.tntware.com/tntconnect/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>How can I add integration for a newsletter service?</title><link>https://www.tntware.com/tntconnect/faqs/en/how-can-i-add-integration-for-a-newsletter-service.aspx</link><description /><dc:language>en-US</dc:language><generator>CommunityServer 2008.5 SP2 (Debug Build: 40407.4157)</generator><item><title>How can I add integration for a newsletter service?</title><link>https://www.tntware.com/tntconnect/faqs/en/how-can-i-add-integration-for-a-newsletter-service.aspx</link><pubDate>Tue, 09 Jan 2018 22:45:48 GMT</pubDate><guid isPermaLink="false">1fa7c37c-d68d-46f5-9639-4669b01a21c5:157</guid><dc:creator>Troy Wolbrink</dc:creator><comments>https://www.tntware.com/tntconnect/faqs/en/how-can-i-add-integration-for-a-newsletter-service/comments.aspx</comments><description>Current revision posted to Frequently Asked Questions by Troy Wolbrink on 1/9/2018 10:45:48 PM&lt;br /&gt;
&lt;h2&gt;How can I add integration for a newsletter service?&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Filed under: Developer Guides&lt;/div&gt;

&lt;p&gt;You need to host a simple text file on your site that describes to TntConnect what your various endpoints are.&amp;nbsp; It&amp;#39;s in the &amp;quot;ini&amp;quot; format.&amp;nbsp; As an example, here&amp;#39;s some actual endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[simple] &lt;a href="http://www.chalkline.org/ini.txt"&gt;http://www.chalkline.org/ini.txt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[advanced] &lt;a href="http://www.prayerletters.com/tntmpd/integration.ini"&gt;http://www.prayerletters.com/tntmpd/integration.ini&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The ini file has several sections ( &lt;span style="color:#0000ff;"&gt;//comments in blue&lt;/span&gt; should not be in actual file):&lt;/p&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;[APPLICATION]&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;MinimumVersion&lt;/strong&gt;=&lt;span style="text-decoration: line-through; color: red;"&gt;3.0.17&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;3.4.8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;// minimum version of TntConnect required&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;RecommendedVersion&lt;/strong&gt;=&lt;span style="text-decoration: line-through; color: red;"&gt;3.0.17&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;3.4.8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;// recommended version of TntConnect&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;strong&gt;[LetterService]&lt;br /&gt;&lt;/strong&gt;&lt;span style="color:#0000ff;"&gt;// if you move your query.ini url, you can put in a redirect here to update TntConnect&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;RedirectQueryIni&lt;/strong&gt;=&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// url to&amp;nbsp;your logo (300x100)&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;LogoUrl&lt;/strong&gt;=http://www.example.com/static/images/logo100.png&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// url for new customer to learn about your service&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AboutUrl&lt;/strong&gt;=http://www.example.com/tntconnect&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// for simple integration, just provide a url to TntConnect-specific instructions &amp;hellip; &lt;strong&gt;done! &amp;hellip; stop here&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;HowToOrderUrl&lt;/strong&gt;=http://www.example.org/&lt;span style="color:#0000ff;"&gt;TntConnect&lt;/span&gt;Instructions.pdf&lt;/p&gt;
&lt;p&gt;// advanced: optional way to allow for authentication persistence via OAUTH access &lt;span style="background: SpringGreen;"&gt;token&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="background: SpringGreen;"&gt;AuthorizationRequestUrl&lt;/span&gt;&lt;/strong&gt;&lt;span style="background: SpringGreen;"&gt;=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;https://www.example.com/tntconnect/authorize?tntdb=$TNTCONNECT_DATABASE$&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;amp;redirect_uri={redirect_uri}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="background: SpringGreen;"&gt;/&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;/&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;advanced&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt; &lt;span style="color:#993366;"&gt;&lt;em&gt;&lt;span style="background: SpringGreen;"&gt;optional&lt;/span&gt;&lt;/em&gt; &lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;endpoint&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;for&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;TntConnect&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;to&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;exchange&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;a&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;temporary&lt;/span&gt; token &lt;span style="background: SpringGreen;"&gt;with&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;a&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;real&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;token&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="background: SpringGreen;"&gt;AuthorizationCompleteUrl&lt;/span&gt;&lt;/strong&gt;&lt;span style="background: SpringGreen;"&gt;=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;https://www.example.com/tntconnect/token?code={code}&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;amp;redirect_uri={redirect_uri}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="background: SpringGreen;"&gt;/&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;/&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;advanced&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt; &lt;span style="color:#993366;"&gt;&lt;em&gt;&lt;span style="background: SpringGreen;"&gt;optional&lt;/span&gt;&lt;/em&gt; &lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;endpoint&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;for&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;TntConnect&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;to&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;revoke&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;access&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;tokens&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="background: SpringGreen;"&gt;AuthorizationRevokeUrl&lt;/span&gt;&lt;/strong&gt;&lt;span style="background: SpringGreen;"&gt;=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;https://www.example.com/tntconnect/authorize_revoke?token=$ACCESS_TOKEN$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#808080;"&gt;&lt;span style="background: SpringGreen;"&gt;/&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;/&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;deprecated&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;optional&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;way&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;to&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;allow&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;for&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;authentication&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;persistence&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;via&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;OAUTH&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;access&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;token&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#808080;"&gt;&lt;strong&gt;AccessTokenRequestUrl&lt;/strong&gt;=https://www.example.com/tntconnect/authorize?tntdb=$TNTCONNECT_DATABASE$&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#808080;"&gt;&lt;strong&gt;AccessTokenCompleteUrl&lt;/strong&gt;=https://www.example.com/tntconnect/authorize_callback&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#808080;"&gt;// &lt;span style="text-decoration: line-through; color: red;"&gt;advanced&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;deprecated&lt;/span&gt;: optional endpoint for TntConnect to revoke access tokens&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#808080;"&gt;&lt;strong&gt;AccessTokenRevokeUrl&lt;/strong&gt;=https://www.example.com/tntconnect/authorize_revoke?token=$ACCESS_TOKEN$&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// advanced integration:&amp;nbsp; provide url to upload CSV of partners&lt;br /&gt;// return url to launch in user&amp;#39;s default browser to complete order&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;CsvInvariantFieldNames&lt;/strong&gt;=True&lt;br /&gt;&lt;strong&gt;CsvLocalizedFieldNames&lt;/strong&gt;=False&lt;br /&gt;&lt;strong&gt;CsvUploadUrl&lt;/strong&gt;=https://www.example.com/tntconnect/upload_file?v=1&amp;amp;ACCESS_TOKEN$&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;For simple integration...&lt;/h2&gt;
&lt;p&gt;You can stop with &amp;quot;&lt;strong&gt;HowToOrderUrl&lt;/strong&gt;&amp;quot;.&amp;nbsp;&lt;/p&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;[LetterService]&lt;br /&gt;&lt;strong&gt;LogoUrl&lt;/strong&gt;=http://www.chalkline.org/CL_logo.jpg&lt;br /&gt;&lt;strong&gt;AboutUrl&lt;/strong&gt;=http://www.chalkline.org/&lt;br /&gt;&lt;strong&gt;HowToOrderUrl&lt;/strong&gt;=http://www.chalkline.org/order_ev_tnt.html&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The integration will look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/4353.chalk-line.png"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/4353.chalk-line.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;For advanced integration...&lt;/h2&gt;
&lt;p&gt;You must provide the &amp;quot;CsvUploadUrl&amp;quot;.&amp;nbsp; The integration will look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/8611.prayer-letters-com.png"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/8611.prayer-letters-com.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Authentication is optional, but if you want to provide&amp;nbsp;TntConnect with an OAUTH token, you can.&amp;nbsp; The benefit is that the user doesn&amp;#39;t have to login to your service each month to send their newsletter.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#808080;"&gt;&lt;strong&gt;&lt;span style="background: SpringGreen;"&gt;Deprecated&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Info&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#808080;"&gt;To provide for OAUTH authentication, you must provide the following endpoints:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="color:#808080;"&gt;AccessTokenRequestUrl&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color:#808080;"&gt;AccessTokenCompleteUrl&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="color:#808080;"&gt;If you include $TNTCONNECT_DATABASE$ in your AccessTokenRequestUrl, it will be substituted for the name of the current TntConnect database file.&amp;nbsp; (Prior to TntConnect 3.1.11, only $TNTMPD_DATABASE$ will be recognized.)&amp;nbsp; This way you can associate tokens with TntConnect databases for future reference.&amp;nbsp; Once user is logged in, redirect the user to the AccessTokenCompleteUrl with the access token in the fragment portion of&amp;nbsp;the&amp;nbsp;url&amp;nbsp;as &lt;strong&gt;#access_token=xxxxx&lt;/strong&gt;&amp;nbsp;&amp;nbsp; In the CsvUploadUrl, $ACCESS_TOKEN$ is substituted for the OAUTH access token&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="background: SpringGreen;"&gt;To&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;provide&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;for&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;OAUTH&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;authentication&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;you&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;must&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;provide&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;following&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;endpoint&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="background: SpringGreen;"&gt;AuthorizationRequestUrl&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="background: SpringGreen;"&gt;If&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;you&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;include&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;$&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;TNTCONNECT_DATABASE$&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;in&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;your&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;AccessTokenRequestUrl&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;it&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;will&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;be&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;substituted&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;for&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;name&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;of&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;current&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;TntConnect&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;database&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;file&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&amp;nbsp; &lt;span style="background: SpringGreen;"&gt;This&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;way&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;you&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;can&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;associate&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;tokens&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;with&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;TntConnect&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;databases&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;for&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;future&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;reference&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="background: SpringGreen;"&gt;Once&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;user&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;is&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;logged&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;in&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;(&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;and&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;approves&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;access)&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;redirect&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;user&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;to&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;{&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;redirect_uri}&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;provided&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;by&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;TntConnect&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&amp;nbsp; &lt;span style="background: SpringGreen;"&gt;You&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;can&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;either&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;&lt;span style="background: SpringGreen;"&gt;modified&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;OAuth&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;2.0&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;quot;Implicit&amp;quot;:&amp;nbsp;&lt;/span&gt;&lt;/strong&gt; &lt;/em&gt;&lt;span style="background: SpringGreen;"&gt;Return&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;access&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;token&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;directly&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;by&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;adding&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;an&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;quot;access_token&amp;quot;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;parameter&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;to&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;redirect_uri&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;url&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span style="background: SpringGreen;"&gt;OAuth&lt;/span&gt;&amp;nbsp;&lt;span style="background: SpringGreen;"&gt;2.0&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;quot;Authorization&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Code&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;:&amp;nbsp;&lt;/span&gt;&lt;/strong&gt; &lt;span style="background: SpringGreen;"&gt;Or&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;you&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;can&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;return&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;a&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;temporary&lt;/span&gt;&amp;nbsp;&lt;span style="background: SpringGreen;"&gt;&amp;quot;authorization&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;code&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;by&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;adding&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;a&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;quot;code&amp;quot;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;query&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;string&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;parameter&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&amp;nbsp; &lt;span style="background: SpringGreen;"&gt;TntConnect&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;will&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;send&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;that&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;code&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;to&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt;&amp;nbsp;&lt;span style="background: SpringGreen;"&gt;AuthorizationCompleteUrl&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;(&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;in&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;place&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;of&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;{&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;code}&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;placeholder)&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="background: SpringGreen;"&gt;TntConnect&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;will&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;also&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;include&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;original&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;{&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;redirect_uri}&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;used&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&amp;nbsp; &lt;span style="background: SpringGreen;"&gt;The&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;access&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;token&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;will&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;then&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;be&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;returned&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;via&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;json&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;as&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;an&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;quot;access_token&amp;quot;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;member&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;(&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;as&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;per&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;OAuth&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;2.0&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;spec)&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="background: SpringGreen;"&gt;If&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;an&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;error&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;occurs&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;you&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;can&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;redirect&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;user&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;back&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;to&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;redirect_uri&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;with&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;an&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;quot;error&amp;quot;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;query&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;string&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;parameter&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;(&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;and&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;optionally&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;and&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;quot;error_description&amp;quot;).&amp;nbsp;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;quot;access_denied&amp;quot;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;is&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;what&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;s&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;expected&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;as&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;quot;error&amp;quot;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;if&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;user&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;simply&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;cancels&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;If you don&amp;#39;t want to support an OAUTH access token, don&amp;#39;t include any of the AccessToken* urls, and don&amp;#39;t include $ACCESS_TOKEN$ in our CsvUploadUrl.&lt;/p&gt;
&lt;h2&gt;CsvUploadUrl&lt;/h2&gt;
&lt;p&gt;TntConnect will POST the&amp;nbsp;&lt;a href="/tntmpd/help/en/pages/groups_current.aspx"&gt;current group &lt;/a&gt;as UTF-8&amp;nbsp;CSV text in the body of request.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;By default, the non-localized &lt;strong&gt;field names&lt;/strong&gt; are included as &lt;strong&gt;column headers&lt;/strong&gt;.&amp;nbsp; But you can control the field names via the &lt;strong&gt;CsvInvariantFieldNames&lt;/strong&gt; and &lt;strong&gt;CsvLocalizedFieldNames&lt;/strong&gt; settings.&amp;nbsp; These are True/False settings.&amp;nbsp; You can include both as True!&amp;nbsp; If you do, invariant (non-localized) field names will always be on the first row, and the localized field names&amp;nbsp;will be&amp;nbsp;on the 2nd row.&amp;nbsp; You might want to include localized field names because these match up better to the mail merge fields in documents uploaded by the user.&amp;nbsp; But you might also want non-localized field names so you when you receive CSV uploads from non-English versions of TntConnect, you know what the fields stand for (i.e. you know which field is the Mailing Address Block for envelopes).&lt;br /&gt;&lt;br /&gt;If there is an error, the service should return:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP 401 if access token is invalid and needs to be reaquired.&lt;/li&gt;
&lt;li&gt;or HTTP status 200, with &amp;ldquo;ERROR&amp;rdquo; on first line of body, actual error message on 2nd line.&lt;br /&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ERROR&lt;br /&gt;Example error message&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;If successful, return either:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP 200, with body of &amp;ldquo;LaunchBrowserUrl=xxxxxx&amp;rdquo;&amp;nbsp;&lt;br /&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LaunchBrowserUrl=http://www.example.com/startorder?id=123123&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;li&gt;or a standard HTTP redirect (HTTP 301/302/303 w/ Location header)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The user&amp;#39;s default browser will then be launched with the url&amp;nbsp;returned so they can complete the order.&lt;/p&gt;
&lt;h2&gt;HOW TO TEST&lt;/h2&gt;
&lt;p&gt;To test your ini url, hold down the Ctrl (or Command key on a Mac)&amp;nbsp;key and right-click on&amp;nbsp;the drop down list:&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/2744.add-test-url.png"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/2744.add-test-url.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;READY?&lt;/h2&gt;
&lt;p&gt;When you have your url ready, send me an email at: &lt;a href="mailto:troy@tntware.com"&gt;troy@tntware.com&lt;/a&gt;.&amp;nbsp; Tell me the NAME and URL in the email.&amp;nbsp; Once I&amp;nbsp;add you to the official list, TntConnect will be updated immediately.&lt;/p&gt;</description></item><item><title>How can I add integration for a newsletter service?</title><link>https://www.tntware.com/tntconnect/faqs/en/how-can-i-add-integration-for-a-newsletter-service/revision/8.aspx</link><pubDate>Wed, 15 Jun 2016 17:14:09 GMT</pubDate><guid isPermaLink="false">1fa7c37c-d68d-46f5-9639-4669b01a21c5:827</guid><dc:creator>Troy Wolbrink</dc:creator><comments>https://www.tntware.com/tntconnect/faqs/en/how-can-i-add-integration-for-a-newsletter-service/comments.aspx</comments><description>Revision 8 posted to Frequently Asked Questions by Troy Wolbrink on 6/15/2016 5:14:09 PM&lt;br /&gt;
&lt;h2&gt;How can I add integration for a newsletter service?&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Filed under: Developer Guides&lt;/div&gt;

&lt;p&gt;You need to host a simple text file on your site that describes to TntConnect what your various endpoints are.&amp;nbsp; It&amp;#39;s in the &amp;quot;ini&amp;quot; format.&amp;nbsp; As an example, here&amp;#39;s some actual endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[simple] &lt;a href="http://www.chalkline.org/ini.txt"&gt;http://www.chalkline.org/ini.txt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[advanced] &lt;a href="http://www.prayerletters.com/tntmpd/integration.ini"&gt;http://www.prayerletters.com/tntmpd/integration.ini&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The ini file has several sections ( &lt;span style="color:#0000ff;"&gt;//comments in blue&lt;/span&gt; should not be in actual file):&lt;/p&gt;
&lt;p&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;[APPLICATION]&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;MinimumVersion&lt;/strong&gt;=3.0.17&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;// minimum version of TntConnect required&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;RecommendedVersion&lt;/strong&gt;=3.0.17&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;// recommended version of TntConnect&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;strong&gt;[LetterService]&lt;br /&gt;&lt;/strong&gt;&lt;span style="color:#0000ff;"&gt;// if you move your query.ini url, you can put in a redirect here to update TntConnect&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;RedirectQueryIni&lt;/strong&gt;=&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// url to&amp;nbsp;your logo (300x100)&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;LogoUrl&lt;/strong&gt;=http://www.example.com/static/images/logo100.png&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// url for new customer to learn about your service&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AboutUrl&lt;/strong&gt;=http://www.example.com/tntconnect&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// for simple integration, just provide a url to TntConnect-specific instructions &amp;hellip; &lt;strong&gt;done! &amp;hellip; stop here&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;HowToOrderUrl&lt;/strong&gt;=http://www.example.org/&lt;span style="color:#0000ff;"&gt;TntConnect&lt;/span&gt;Instructions.pdf&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// advanced: optional way to allow for authentication persistence via OAUTH access token&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AccessTokenRequestUrl&lt;/strong&gt;=https://www.example.com/tntconnect/authorize?tntdb=$TNTCONNECT_DATABASE$&lt;br /&gt;&lt;strong&gt;AccessTokenCompleteUrl&lt;/strong&gt;=https://www.example.com/tntconnect/authorize_callback&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// advanced: optional endpoint for TntConnect to revoke access tokens&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AccessTokenRevokeUrl&lt;/strong&gt;=https://www.example.com/tntconnect/authorize_revoke?token=$ACCESS_TOKEN$&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// advanced integration:&amp;nbsp; provide url to upload CSV of partners&lt;br /&gt;// return url to launch in user&amp;#39;s default browser to complete order&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;CsvInvariantFieldNames&lt;/strong&gt;=True&lt;br /&gt;&lt;strong&gt;CsvLocalizedFieldNames&lt;/strong&gt;=False&lt;br /&gt;&lt;strong&gt;CsvUploadUrl&lt;/strong&gt;=https://www.example.com/tntconnect/upload_file?v=1&amp;amp;ACCESS_TOKEN$&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;h2&gt;For simple integration...&lt;/h2&gt;
&lt;p&gt;You can stop with &amp;quot;&lt;strong&gt;HowToOrderUrl&lt;/strong&gt;&amp;quot;.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;[LetterService]&lt;br /&gt;&lt;strong&gt;LogoUrl&lt;/strong&gt;=http://www.chalkline.org/CL_logo.jpg&lt;br /&gt;&lt;strong&gt;AboutUrl&lt;/strong&gt;=http://www.chalkline.org/&lt;br /&gt;&lt;strong&gt;HowToOrderUrl&lt;/strong&gt;=http://www.chalkline.org/order_ev_tnt.html&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;The integration will look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/4353.chalk-line.png"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/4353.chalk-line.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;For advanced integration...&lt;/h2&gt;
&lt;p&gt;You must provide the &amp;quot;CsvUploadUrl&amp;quot;.&amp;nbsp; The integration will look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/8611.prayer-letters-com.png"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/8611.prayer-letters-com.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Authentication is optional, but if you want to provide&amp;nbsp;&lt;span style="text-decoration: line-through; color: red;"&gt;TntMPD&lt;/span&gt; &amp;nbsp;&lt;span style="background: SpringGreen;"&gt;TntConnect&lt;/span&gt; with an OAUTH token, you can.&amp;nbsp; The benefit is that the user doesn&amp;#39;t have to login to your service each month to send their newsletter.&amp;nbsp; To provide for OAUTH authentication, you must provide the following endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AccessTokenRequestUrl&lt;/li&gt;
&lt;li&gt;AccessTokenCompleteUrl&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you include $&lt;span style="text-decoration: line-through; color: red;"&gt;TNTMPD_DATABASE$&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;TNTCONNECT_DATABASE$&lt;/span&gt; in your AccessTokenRequestUrl, it will be substituted for the name of the current &lt;span style="text-decoration: line-through; color: red;"&gt;TntMPD&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;TntConnect&lt;/span&gt; database file.&amp;nbsp; &lt;span style="background: SpringGreen;"&gt;(&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;Prior&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;to&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;TntConnect&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;3.1.11&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;only&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;$&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;TNTMPD_DATABASE$&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;will&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;be&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;recognized.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;)&lt;/span&gt;&amp;nbsp; This way you can associate tokens with &lt;span style="text-decoration: line-through; color: red;"&gt;TntMPD&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;TntConnect&lt;/span&gt; databases for future reference.&amp;nbsp; Once user is logged in, redirect the user to the AccessTokenCompleteUrl with the access token in the fragment portion of&amp;nbsp;the&amp;nbsp;url&amp;nbsp;as &lt;strong&gt;#access_token=xxxxx&lt;/strong&gt;&amp;nbsp;&amp;nbsp; In the CsvUploadUrl, $ACCESS_TOKEN$ is substituted for the OAUTH access token.&lt;/p&gt;
&lt;p&gt;If you don&amp;#39;t want to support an OAUTH access token, don&amp;#39;t include any of the AccessToken* urls, and don&amp;#39;t include $ACCESS_TOKEN$ in our CsvUploadUrl.&lt;/p&gt;
&lt;h2&gt;CsvUploadUrl&lt;/h2&gt;
&lt;p&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;TntMPD&lt;/span&gt; &lt;/h2&gt;
&lt;p&gt;&lt;span style="background: SpringGreen;"&gt;TntConnect&lt;/span&gt; will POST the&amp;nbsp;&lt;a href="/tntmpd/help/en/pages/groups_current.aspx"&gt;current group &lt;/a&gt;as UTF-8&amp;nbsp;CSV text in the body of request.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;By default, the non-localized &lt;strong&gt;field names&lt;/strong&gt; are included as &lt;strong&gt;column headers&lt;/strong&gt;.&amp;nbsp; But you can control the field names via the &lt;strong&gt;CsvInvariantFieldNames&lt;/strong&gt; and &lt;strong&gt;CsvLocalizedFieldNames&lt;/strong&gt; settings.&amp;nbsp; These are True/False settings.&amp;nbsp; You can include both as True!&amp;nbsp; If you do, invariant (non-localized) field names will always be on the first row, and the localized field names&amp;nbsp;will be&amp;nbsp;on the 2nd row.&amp;nbsp; You might want to include localized field names because these match up better to the mail merge fields in documents uploaded by the user.&amp;nbsp; But you might also want non-localized field names so you when you receive CSV uploads from non-English versions of &lt;span style="text-decoration: line-through; color: red;"&gt;TntMPD&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;TntConnect&lt;/span&gt;, you know what the fields stand for (i.e. you know which field is the Mailing Address Block for envelopes).&lt;br /&gt;&lt;br /&gt;If there is an error, the service should return:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP 401 if access token is invalid and needs to be reaquired.&lt;/li&gt;
&lt;li&gt;or HTTP status 200, with &amp;ldquo;ERROR&amp;rdquo; on first line of body, actual error message on 2nd line.&lt;br /&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ERROR&lt;br /&gt;Example error message&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;If successful, return either:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP 200, with body of &amp;ldquo;LaunchBrowserUrl=xxxxxx&amp;rdquo;&amp;nbsp;&lt;br /&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LaunchBrowserUrl=http://www.example.com/startorder?id=123123&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;li&gt;or a standard HTTP redirect (HTTP 301/302/303 w/ Location header)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The user&amp;#39;s default browser will then be launched with the url&amp;nbsp;returned so they can complete the order.&lt;/p&gt;
&lt;h2&gt;HOW TO TEST&lt;/h2&gt;
&lt;p&gt;To test your ini url, hold down the Ctrl (or Command key on a Mac)&amp;nbsp;key and right-click on&amp;nbsp;the drop down list:&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/2744.add-test-url.png"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/2744.add-test-url.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;READY?&lt;/h2&gt;
&lt;p&gt;When you have your url ready, send me an email at: &lt;a href="mailto:troy@tntware.com"&gt;troy@tntware.com&lt;/a&gt;.&amp;nbsp; Tell me the NAME and URL in the email.&amp;nbsp; Once I&amp;nbsp;add you to the official list, &lt;span style="text-decoration: line-through; color: red;"&gt;TntMPD&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;TntConnect&lt;/span&gt; will be updated immediately.&lt;/p&gt;</description></item><item><title>How can I add integration for a newsletter service?</title><link>https://www.tntware.com/tntconnect/faqs/en/how-can-i-add-integration-for-a-newsletter-service/revision/7.aspx</link><pubDate>Wed, 15 Jun 2016 17:10:29 GMT</pubDate><guid isPermaLink="false">1fa7c37c-d68d-46f5-9639-4669b01a21c5:689</guid><dc:creator>Troy Wolbrink</dc:creator><comments>https://www.tntware.com/tntconnect/faqs/en/how-can-i-add-integration-for-a-newsletter-service/comments.aspx</comments><description>Revision 7 posted to Frequently Asked Questions by Troy Wolbrink on 6/15/2016 5:10:29 PM&lt;br /&gt;
&lt;h2&gt;How can I add integration for a newsletter service?&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Filed under: Developer Guides&lt;/div&gt;

&lt;p&gt;You need to host a simple text file on your site that describes to &lt;span style="text-decoration: line-through; color: red;"&gt;TntMPD&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;TntConnect&lt;/span&gt; what your various endpoints are.&amp;nbsp; It&amp;#39;s in the &amp;quot;ini&amp;quot; format.&amp;nbsp; As an example, here&amp;#39;s some actual endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[simple] &lt;a href="http://www.chalkline.org/ini.txt"&gt;http://www.chalkline.org/ini.txt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[advanced] &lt;a href="http://www.prayerletters.com/tntmpd/integration.ini"&gt;http://www.prayerletters.com/tntmpd/integration.ini&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The ini file has several sections ( &lt;span style="color:#0000ff;"&gt;//comments in blue&lt;/span&gt; should not be in actual file):&lt;/p&gt;
&lt;p&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;[APPLICATION]&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;MinimumVersion&lt;/strong&gt;=3.0.17&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;// minimum version of &lt;span style="text-decoration: line-through; color: red;"&gt;TntMPD&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;TntConnect&lt;/span&gt; required&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;RecommendedVersion&lt;/strong&gt;=3.0.17&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;// recommended version of &lt;span style="text-decoration: line-through; color: red;"&gt;TntMPD&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;TntConnect&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;strong&gt;[LetterService]&lt;br /&gt;&lt;/strong&gt;&lt;span style="color:#0000ff;"&gt;// if you move your query.ini url, you can put in a redirect here to update &lt;span style="text-decoration: line-through; color: red;"&gt;TntMPD&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;TntConnect&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;RedirectQueryIni&lt;/strong&gt;=&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// url to&amp;nbsp;your logo (300x100)&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;LogoUrl&lt;/strong&gt;=http://www.example.com/static/images/logo100.png&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// url for new customer to learn about your service&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AboutUrl&lt;/strong&gt;=&lt;span style="text-decoration: line-through; color: red;"&gt;http://www.example.com/tntmpd&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;http://www.example.com/tntconnect&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// for simple integration, just provide a url to &lt;span style="text-decoration: line-through; color: red;"&gt;TntMPD-specific&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;TntConnect-specific&lt;/span&gt; instructions &amp;hellip; &lt;strong&gt;done! &amp;hellip; stop here&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;HowToOrderUrl&lt;/strong&gt;=&lt;span style="text-decoration: line-through; color: red;"&gt;http://www.example.org/TNTMPDInstructions.pdf&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;http://www.example.org/&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="background: SpringGreen;"&gt;TntConnect&lt;/span&gt;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;Instructions.pdf&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// advanced: optional way to allow for authentication persistence via OAUTH access token&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AccessTokenRequestUrl&lt;/strong&gt;=&lt;span style="text-decoration: line-through; color: red;"&gt;https://www.example.com/tntmpd/authorize?tntdb=$TNTMPD_DATABASE$&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;https://www.example.com/tntconnect/authorize?tntdb=$TNTCONNECT_DATABASE$&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AccessTokenCompleteUrl&lt;/strong&gt;=&lt;span style="text-decoration: line-through; color: red;"&gt;https://www.example.com/tntmpd/authorize_callback&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;https://www.example.com/tntconnect/authorize_callback&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// advanced: optional endpoint for &lt;span style="text-decoration: line-through; color: red;"&gt;TntMPD&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;TntConnect&lt;/span&gt; to revoke access tokens&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AccessTokenRevokeUrl&lt;/strong&gt;=&lt;span style="text-decoration: line-through; color: red;"&gt;https://www.example.com/tntmpd/authorize_revoke?token=$ACCESS_TOKEN$&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;https://www.example.com/tntconnect/authorize_revoke?token=$ACCESS_TOKEN$&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// advanced integration:&amp;nbsp; provide url to upload CSV of partners&lt;br /&gt;// return url to launch in user&amp;#39;s default browser to complete order&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;CsvInvariantFieldNames&lt;/strong&gt;=True&lt;br /&gt;&lt;strong&gt;CsvLocalizedFieldNames&lt;/strong&gt;=False&lt;br /&gt;&lt;strong&gt;CsvUploadUrl&lt;/strong&gt;=&lt;span style="text-decoration: line-through; color: red;"&gt;https://www.example.com/tntmpd/upload_file?v=1&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;https://www.example.com/tntconnect/upload_file?v=1&lt;/span&gt;&amp;amp;ACCESS_TOKEN$&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;h2&gt;For simple integration...&lt;/h2&gt;
&lt;p&gt;You can stop with &amp;quot;&lt;strong&gt;HowToOrderUrl&lt;/strong&gt;&amp;quot;.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;[LetterService]&lt;br /&gt;&lt;strong&gt;LogoUrl&lt;/strong&gt;=http://www.chalkline.org/CL_logo.jpg&lt;br /&gt;&lt;strong&gt;AboutUrl&lt;/strong&gt;=http://www.chalkline.org/&lt;br /&gt;&lt;strong&gt;HowToOrderUrl&lt;/strong&gt;=http://www.chalkline.org/order_ev_tnt.html&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;The integration will look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/4353.chalk-line.png"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/4353.chalk-line.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;For advanced integration...&lt;/h2&gt;
&lt;p&gt;You must provide the &amp;quot;CsvUploadUrl&amp;quot;.&amp;nbsp; The integration will look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/8611.prayer-letters-com.png"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/8611.prayer-letters-com.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Authentication is optional, but if you want to provide&amp;nbsp;TntMPD with an OAUTH token, you can.&amp;nbsp; The benefit is that the user doesn&amp;#39;t have to login to your service each month to send their newsletter.&amp;nbsp; To provide for OAUTH authentication, you must provide the following endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AccessTokenRequestUrl&lt;/li&gt;
&lt;li&gt;AccessTokenCompleteUrl&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you include $TNTMPD_DATABASE$ in your AccessTokenRequestUrl, it will be substituted for the name of the current TntMPD database file.&amp;nbsp; This way you can associate tokens with TntMPD databases for future reference.&amp;nbsp; Once user is logged in, redirect the user to the AccessTokenCompleteUrl with the access token in the fragment portion of&amp;nbsp;the&amp;nbsp;url&amp;nbsp;as &lt;strong&gt;#access_token=xxxxx&lt;/strong&gt;&amp;nbsp;&amp;nbsp; In the CsvUploadUrl, $ACCESS_TOKEN$ is substituted for the OAUTH access token.&lt;/p&gt;
&lt;p&gt;If you don&amp;#39;t want to support an OAUTH access token, don&amp;#39;t include any of the AccessToken* urls, and don&amp;#39;t include $ACCESS_TOKEN$ in our CsvUploadUrl.&lt;/p&gt;
&lt;h2&gt;CsvUploadUrl&lt;/h2&gt;
&lt;p&gt;TntMPD will POST the&amp;nbsp;&lt;a href="/tntmpd/help/en/pages/groups_current.aspx"&gt;current group &lt;/a&gt;as UTF-8&amp;nbsp;CSV text in the body of request.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;By default, the non-localized &lt;strong&gt;field names&lt;/strong&gt; are included as &lt;strong&gt;column headers&lt;/strong&gt;.&amp;nbsp; But you can control the field names via the &lt;strong&gt;CsvInvariantFieldNames&lt;/strong&gt; and &lt;strong&gt;CsvLocalizedFieldNames&lt;/strong&gt; settings.&amp;nbsp; These are True/False settings.&amp;nbsp; You can include both as True!&amp;nbsp; If you do, invariant (non-localized) field names will always be on the first row, and the localized field names&amp;nbsp;will be&amp;nbsp;on the 2nd row.&amp;nbsp; You might want to include localized field names because these match up better to the mail merge fields in documents uploaded by the user.&amp;nbsp; But you might also want non-localized field names so you when you receive CSV uploads from non-English versions of TntMPD, you know what the fields stand for (i.e. you know which field is the Mailing Address Block for envelopes).&lt;br /&gt;&lt;br /&gt;If there is an error, the service should return:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP 401 if access token is invalid and needs to be reaquired.&lt;/li&gt;
&lt;li&gt;or HTTP status 200, with &amp;ldquo;ERROR&amp;rdquo; on first line of body, actual error message on 2nd line.&lt;br /&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ERROR&lt;br /&gt;Example error message&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;If successful, return either:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP 200, with body of &amp;ldquo;LaunchBrowserUrl=xxxxxx&amp;rdquo;&amp;nbsp;&lt;br /&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LaunchBrowserUrl=http://www.example.com/startorder?id=123123&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;li&gt;or a standard HTTP redirect (HTTP 301/302/303 w/ Location header)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The user&amp;#39;s default browser will then be launched with the url&amp;nbsp;returned so they can complete the order.&lt;/p&gt;
&lt;h2&gt;HOW TO TEST&lt;/h2&gt;
&lt;p&gt;To test your ini url, hold down the Ctrl (or Command key on a Mac)&amp;nbsp;key and right-click on&amp;nbsp;the drop down list:&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/2744.add-test-url.png"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/2744.add-test-url.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;READY?&lt;/h2&gt;
&lt;p&gt;When you have your url ready, send me an email at: &lt;a href="mailto:troy@wolbrinkfamily.com"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;troy@wolbrinkfamily.com&lt;/span&gt;&lt;a href="mailto:troy@wolbrinkfamily.com"&gt;&lt;span style="background: SpringGreen;"&gt;troy@tntware.com&lt;/span&gt;&lt;/a&gt;.&amp;nbsp; Tell me the NAME and URL in the email.&amp;nbsp; Once I&amp;nbsp;add you to the official list, TntMPD will be updated immediately.&lt;/p&gt;</description></item><item><title>How can I add integration for a newsletter service?</title><link>https://www.tntware.com/tntconnect/faqs/en/how-can-i-add-integration-for-a-newsletter-service/revision/6.aspx</link><pubDate>Thu, 26 Jun 2014 16:26:33 GMT</pubDate><guid isPermaLink="false">1fa7c37c-d68d-46f5-9639-4669b01a21c5:688</guid><dc:creator>Troy Wolbrink</dc:creator><comments>https://www.tntware.com/tntconnect/faqs/en/how-can-i-add-integration-for-a-newsletter-service/comments.aspx</comments><description>Revision 6 posted to Frequently Asked Questions by Troy Wolbrink on 6/26/2014 4:26:33 PM&lt;br /&gt;
&lt;h2&gt;How can I add integration for a newsletter service?&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Filed under: Developer Guides&lt;/div&gt;

&lt;p&gt;You need to host a simple text file on your site that describes to TntMPD what your various endpoints are.&amp;nbsp; It&amp;#39;s in the &amp;quot;ini&amp;quot; format.&amp;nbsp; As an example, here&amp;#39;s some actual endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[simple] &lt;a href="http://www.chalkline.org/ini.txt"&gt;http://www.chalkline.org/ini.txt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[advanced] &lt;a href="http://www.prayerletters.com/tntmpd/integration.ini"&gt;http://www.prayerletters.com/tntmpd/integration.ini&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The ini file has several sections ( &lt;span style="color:#0000ff;"&gt;//comments in blue&lt;/span&gt; should not be in actual file):&lt;/p&gt;
&lt;p&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;[APPLICATION]&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;MinimumVersion&lt;/strong&gt;=3.0.17&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;// minimum version of TntMPD required&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;RecommendedVersion&lt;/strong&gt;=3.0.17&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;// recommended version of TntMPD&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;strong&gt;[LetterService]&lt;br /&gt;&lt;/strong&gt;&lt;span style="color:#0000ff;"&gt;// if you move your query.ini url, you can put in a redirect here to update TntMPD&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;RedirectQueryIni&lt;/strong&gt;=&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// url to&amp;nbsp;your logo (300x100)&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;LogoUrl&lt;/strong&gt;=http://www.example.com/static/images/logo100.png&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// url for new customer to learn about your service&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AboutUrl&lt;/strong&gt;=http://www.example.com/tntmpd&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// for simple integration, just provide a url to TntMPD-specific instructions &amp;hellip; &lt;strong&gt;done! &amp;hellip; stop here&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;HowToOrderUrl&lt;/strong&gt;=http://www.example.org/TNTMPDInstructions.pdf&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// advanced: optional way to allow for authentication persistence via OAUTH access token&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AccessTokenRequestUrl&lt;/strong&gt;=https://www.example.com/tntmpd/authorize?tntdb=$TNTMPD_DATABASE$&lt;br /&gt;&lt;strong&gt;AccessTokenCompleteUrl&lt;/strong&gt;=https://www.example.com/tntmpd/authorize_callback&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// advanced: optional endpoint for TntMPD to revoke access tokens&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AccessTokenRevokeUrl&lt;/strong&gt;=https://www.example.com/tntmpd/authorize_revoke?token=$ACCESS_TOKEN$&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// advanced integration:&amp;nbsp; provide url to upload CSV of partners&lt;br /&gt;// return url to launch in user&amp;#39;s default browser to complete order&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;CsvInvariantFieldNames&lt;/strong&gt;=True&lt;br /&gt;&lt;strong&gt;CsvLocalizedFieldNames&lt;/strong&gt;=False&lt;br /&gt;&lt;strong&gt;CsvUploadUrl&lt;/strong&gt;=https://www.example.com/tntmpd/upload_file?v=1&amp;amp;ACCESS_TOKEN$&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;h2&gt;For simple integration...&lt;/h2&gt;
&lt;p&gt;You can stop with &amp;quot;&lt;strong&gt;HowToOrderUrl&lt;/strong&gt;&amp;quot;.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="background: SpringGreen;"&gt;[&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;LetterService]&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="background: SpringGreen;"&gt;LogoUrl&lt;/span&gt;&lt;/strong&gt;&lt;span style="background: SpringGreen;"&gt;=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;http://www.chalkline.org/CL_logo.jpg&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="background: SpringGreen;"&gt;AboutUrl&lt;/span&gt;&lt;/strong&gt;&lt;span style="background: SpringGreen;"&gt;=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;http://www.chalkline.org/&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="background: SpringGreen;"&gt;HowToOrderUrl&lt;/span&gt;&lt;/strong&gt;&lt;span style="background: SpringGreen;"&gt;=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;http://www.chalkline.org/order_ev_tnt.html&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;The integration will look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/4353.chalk-line.png"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/4353.chalk-line.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;For advanced integration...&lt;/h2&gt;
&lt;p&gt;You must provide the &amp;quot;CsvUploadUrl&amp;quot;.&amp;nbsp; The integration will look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/8611.prayer-letters-com.png"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/8611.prayer-letters-com.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Authentication is optional, but if you want to provide&amp;nbsp;TntMPD with an OAUTH token, you can.&amp;nbsp; The benefit is that the user doesn&amp;#39;t have to login to your service each month to send their newsletter.&amp;nbsp; To provide for OAUTH authentication, you must provide the following endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AccessTokenRequestUrl&lt;/li&gt;
&lt;li&gt;AccessTokenCompleteUrl&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you include $TNTMPD_DATABASE$ in your AccessTokenRequestUrl, it will be substituted for the name of the current TntMPD database file.&amp;nbsp; This way you can associate tokens with TntMPD databases for future reference.&amp;nbsp; Once user is logged in, redirect the user to the AccessTokenCompleteUrl with the access token in the fragment portion of&amp;nbsp;the&amp;nbsp;url&amp;nbsp;as &lt;strong&gt;#access_token=xxxxx&lt;/strong&gt;&amp;nbsp;&amp;nbsp; In the CsvUploadUrl, $ACCESS_TOKEN$ is substituted for the OAUTH access token.&lt;/p&gt;
&lt;p&gt;If you don&amp;#39;t want to support an OAUTH access token, don&amp;#39;t include any of the AccessToken* urls, and don&amp;#39;t include $ACCESS_TOKEN$ in our CsvUploadUrl.&lt;/p&gt;
&lt;h2&gt;CsvUploadUrl&lt;/h2&gt;
&lt;p&gt;TntMPD will POST the&amp;nbsp;&lt;a href="/tntmpd/help/en/pages/groups_current.aspx"&gt;current group &lt;/a&gt;as UTF-8&amp;nbsp;CSV text in the body of request.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;By default, the non-localized &lt;strong&gt;field names&lt;/strong&gt; are included as &lt;strong&gt;column headers&lt;/strong&gt;.&amp;nbsp; But you can control the field names via the &lt;strong&gt;CsvInvariantFieldNames&lt;/strong&gt; and &lt;strong&gt;CsvLocalizedFieldNames&lt;/strong&gt; settings.&amp;nbsp; These are True/False settings.&amp;nbsp; You can include both as True!&amp;nbsp; If you do, invariant (non-localized) field names will always be on the first row, and the localized field names&amp;nbsp;will be&amp;nbsp;on the 2nd row.&amp;nbsp; You might want to include localized field names because these match up better to the mail merge fields in documents uploaded by the user.&amp;nbsp; But you might also want non-localized field names so you when you receive CSV uploads from non-English versions of TntMPD, you know what the fields stand for (i.e. you know which field is the Mailing Address Block for envelopes).&lt;br /&gt;&lt;br /&gt;If there is an error, the service should return:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP 401 if access token is invalid and needs to be reaquired.&lt;/li&gt;
&lt;li&gt;or HTTP status 200, with &amp;ldquo;ERROR&amp;rdquo; on first line of body, actual error message on 2nd line.&lt;br /&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ERROR&lt;br /&gt;Example error message&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;If successful, return either:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP 200, with body of &amp;ldquo;LaunchBrowserUrl=xxxxxx&amp;rdquo;&amp;nbsp;&lt;br /&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LaunchBrowserUrl=http://www.example.com/startorder?id=123123&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;li&gt;or a standard HTTP redirect (HTTP 301/302/303 w/ Location header)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The user&amp;#39;s default browser will then be launched with the url&amp;nbsp;returned so they can complete the order.&lt;/p&gt;
&lt;h2&gt;HOW TO TEST&lt;/h2&gt;
&lt;p&gt;To test your ini url, hold down the Ctrl (or Command key on a Mac)&amp;nbsp;key and right-click on&amp;nbsp;the drop down list:&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/2744.add-test-url.png"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/2744.add-test-url.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;READY?&lt;/h2&gt;
&lt;p&gt;When you have your url ready, send me an email at: &lt;a href="mailto:troy.wolbrink@ccci.org"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;troy.wolbrink@ccci.org&lt;/span&gt;&lt;a href="mailto:troy@wolbrinkfamily.com"&gt;&lt;span style="background: SpringGreen;"&gt;troy@wolbrinkfamily.com&lt;/span&gt;&lt;/a&gt;.&amp;nbsp; Tell me the NAME and URL in the email.&amp;nbsp; Once I&amp;nbsp;add you to the official list, TntMPD will be updated immediately.&lt;/p&gt;</description></item><item><title>How can I add integration for a newsletter service?</title><link>https://www.tntware.com/tntconnect/faqs/en/how-can-i-add-integration-for-a-newsletter-service/revision/5.aspx</link><pubDate>Thu, 19 Sep 2013 15:03:33 GMT</pubDate><guid isPermaLink="false">1fa7c37c-d68d-46f5-9639-4669b01a21c5:565</guid><dc:creator>Troy Wolbrink</dc:creator><comments>https://www.tntware.com/tntconnect/faqs/en/how-can-i-add-integration-for-a-newsletter-service/comments.aspx</comments><description>Revision 5 posted to Frequently Asked Questions by Troy Wolbrink on 9/19/2013 3:03:33 PM&lt;br /&gt;
&lt;h2&gt;How can I add integration for a newsletter service?&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Filed under: Developer Guides&lt;/div&gt;

&lt;p&gt;You need to host a simple text file on your site that describes to TntMPD what your various endpoints are.&amp;nbsp; It&amp;#39;s in the &amp;quot;ini&amp;quot; format.&amp;nbsp; As an example, here&amp;#39;s some actual endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[simple] &lt;a href="http://www.chalkline.org/ini.txt"&gt;http://www.chalkline.org/ini.txt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[advanced] &lt;a href="http://www.prayerletters.com/tntmpd/integration.ini"&gt;http://www.prayerletters.com/tntmpd/integration.ini&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The ini file has several sections ( &lt;span style="color:#0000ff;"&gt;//comments in blue&lt;/span&gt; should not be in actual file):&lt;/p&gt;
&lt;p&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;[APPLICATION]&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;MinimumVersion&lt;/strong&gt;=3.0.17&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;// minimum version of TntMPD required&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;RecommendedVersion&lt;/strong&gt;=3.0.17&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;// recommended version of TntMPD&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;strong&gt;[LetterService]&lt;br /&gt;&lt;/strong&gt;&lt;span style="color:#0000ff;"&gt;// if you move your query.ini url, you can put in a redirect here to update TntMPD&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;RedirectQueryIni&lt;/strong&gt;=&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// url to&amp;nbsp;your logo (300x100)&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;LogoUrl&lt;/strong&gt;=http://www.example.com/static/images/logo100.png&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// url for new customer to learn about your service&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AboutUrl&lt;/strong&gt;=http://www.example.com/tntmpd&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// for simple integration, just provide a url to TntMPD-specific instructions &amp;hellip; &lt;strong&gt;done! &amp;hellip; stop here&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;HowToOrderUrl&lt;/strong&gt;=http://www.example.org/TNTMPDInstructions.pdf&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// advanced: optional way to allow for authentication persistence via OAUTH access token&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AccessTokenRequestUrl&lt;/strong&gt;=https://www.example.com/tntmpd/authorize?tntdb=$TNTMPD_DATABASE$&lt;br /&gt;&lt;strong&gt;AccessTokenCompleteUrl&lt;/strong&gt;=https://www.example.com/tntmpd/authorize_callback&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// advanced: optional endpoint for TntMPD to revoke access tokens&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AccessTokenRevokeUrl&lt;/strong&gt;=https://www.example.com/tntmpd/authorize_revoke?token=$ACCESS_TOKEN$&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// advanced integration:&amp;nbsp; provide url to upload CSV of partners&lt;br /&gt;// return url to launch in user&amp;#39;s default browser to complete order&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;CsvFieldNamesAreLocalized&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="background: SpringGreen;"&gt;CsvInvariantFieldNames&lt;/span&gt;&lt;/strong&gt;=&lt;span style="text-decoration: line-through; color: red;"&gt;FALSE&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;True&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="background: SpringGreen;"&gt;CsvLocalizedFieldNames&lt;/span&gt;&lt;/strong&gt;&lt;span style="background: SpringGreen;"&gt;=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;False&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;CsvUploadUrl&lt;/strong&gt;=https://www.example.com/tntmpd/upload_file?v=1&amp;amp;ACCESS_TOKEN$&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;h2&gt;For simple integration...&lt;/h2&gt;
&lt;p&gt;You can stop with &amp;quot;&lt;strong&gt;HowToOrderUrl&lt;/strong&gt;&amp;quot;.&amp;nbsp; The integration will look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/4353.chalk-line.png"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/4353.chalk-line.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;For advanced integration...&lt;/h2&gt;
&lt;p&gt;You must provide the &amp;quot;CsvUploadUrl&amp;quot;.&amp;nbsp; The integration will look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/8611.prayer-letters-com.png"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/8611.prayer-letters-com.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Authentication is optional, but if you want to provide&amp;nbsp;TntMPD with an OAUTH token, you can.&amp;nbsp; The benefit is that the user doesn&amp;#39;t have to login to your service each month to send their newsletter.&amp;nbsp; To provide for OAUTH authentication, you must provide the following endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AccessTokenRequestUrl&lt;/li&gt;
&lt;li&gt;AccessTokenCompleteUrl&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you include $TNTMPD_DATABASE$ in your AccessTokenRequestUrl, it will be substituted for the name of the current TntMPD database file.&amp;nbsp; This way you can associate tokens with TntMPD databases for future reference.&amp;nbsp; Once user is logged in, redirect the user to the AccessTokenCompleteUrl with the access token in the fragment portion of&amp;nbsp;the&amp;nbsp;url&amp;nbsp;as &lt;strong&gt;#access_token=xxxxx&lt;/strong&gt;&amp;nbsp;&amp;nbsp; In the CsvUploadUrl, $ACCESS_TOKEN$ is substituted for the OAUTH access token.&lt;/p&gt;
&lt;p&gt;If you don&amp;#39;t want to support an OAUTH access token, don&amp;#39;t include any of the AccessToken* urls, and don&amp;#39;t include $ACCESS_TOKEN$ in our CsvUploadUrl.&lt;/p&gt;
&lt;h2&gt;CsvUploadUrl&lt;/h2&gt;
&lt;p&gt;TntMPD will POST the&amp;nbsp;&lt;a href="/tntmpd/help/en/pages/groups_current.aspx"&gt;current group &lt;/a&gt;as UTF-8&amp;nbsp;CSV text in the body of request&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;span style="background: SpringGreen;"&gt;By&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;default&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;non-localized&lt;/span&gt; &lt;strong&gt;&lt;span style="background: SpringGreen;"&gt;field&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;names&lt;/span&gt;&lt;/strong&gt; &lt;span style="background: SpringGreen;"&gt;are&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;included&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;as&lt;/span&gt; &lt;strong&gt;&lt;span style="background: SpringGreen;"&gt;column&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;headers&lt;/span&gt;&lt;/strong&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&amp;nbsp; &lt;span style="background: SpringGreen;"&gt;But&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;you&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;can&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;control&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;field&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;names&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;via&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;strong&gt;&lt;span style="background: SpringGreen;"&gt;CsvInvariantFieldNames&lt;/span&gt;&lt;/strong&gt; &lt;span style="background: SpringGreen;"&gt;and&lt;/span&gt; &lt;strong&gt;&lt;span style="background: SpringGreen;"&gt;CsvLocalizedFieldNames&lt;/span&gt;&lt;/strong&gt; &lt;span style="background: SpringGreen;"&gt;settings&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&amp;nbsp; &lt;span style="background: SpringGreen;"&gt;These&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;are&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;True/False&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;settings&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&amp;nbsp; &lt;span style="background: SpringGreen;"&gt;You&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;can&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;include&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;both&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;as&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;True&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;!&lt;/span&gt;&amp;nbsp; &lt;span style="background: SpringGreen;"&gt;If&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;you&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;do&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;invariant&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;(&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;non-localized)&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;field&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;names&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;will&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;always&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;be&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;on&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;first&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;row&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;and&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;localized&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;field&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;names&lt;/span&gt;&amp;nbsp;&lt;span style="background: SpringGreen;"&gt;will&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;be&lt;/span&gt;&amp;nbsp;&lt;span style="background: SpringGreen;"&gt;on&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;2nd&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;row&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&amp;nbsp; &lt;span style="background: SpringGreen;"&gt;You&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;might&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;want&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;to&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;include&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;localized&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;field&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;names&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;because&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;these&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;match&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;up&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;better&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;to&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;mail&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;merge&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;fields&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;in&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;documents&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;uploaded&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;by&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;user&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&amp;nbsp; &lt;span style="background: SpringGreen;"&gt;But&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;you&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;might&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;also&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;want&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;non-localized&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;field&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;names&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;so&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;you&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;when&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;you&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;receive&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;CSV&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;uploads&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;from&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;non-English&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;versions&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;of&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;TntMPD&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;you&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;know&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;what&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;fields&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;stand&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;for&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;(&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;i.e.&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;you&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;know&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;which&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;field&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;is&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Mailing&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Address&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Block&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;for&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;envelopes)&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;If there is an error, the service should return:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP 401 if access token is invalid and needs to be reaquired.&lt;/li&gt;
&lt;li&gt;or HTTP status 200, with &amp;ldquo;ERROR&amp;rdquo; on first line of body, actual error message on 2nd line.&lt;br /&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ERROR&lt;br /&gt;Example error message&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;If successful, return either:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP 200, with body of &amp;ldquo;LaunchBrowserUrl=xxxxxx&amp;rdquo;&amp;nbsp;&lt;br /&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LaunchBrowserUrl=http://www.example.com/startorder?id=123123&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;li&gt;or a standard HTTP redirect (HTTP 301/302/303 w/ Location header)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The user&amp;#39;s default browser will then be launched with the url&amp;nbsp;returned so they can complete the order.&lt;/p&gt;
&lt;h2&gt;HOW TO TEST&lt;/h2&gt;
&lt;p&gt;To test your ini url, hold down the Ctrl (or Command key on a Mac)&amp;nbsp;key and right-click on&amp;nbsp;the drop down list:&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/2744.add-test-url.png"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/2744.add-test-url.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;READY?&lt;/h2&gt;
&lt;p&gt;When you have your url ready, send me an email at: &lt;a href="mailto:troy.wolbrink@ccci.org"&gt;troy.wolbrink@ccci.org&lt;/a&gt;.&amp;nbsp; Tell me the NAME and URL in the email.&amp;nbsp; Once I&amp;nbsp;add you to the official list, TntMPD will be updated immediately.&lt;/p&gt;</description></item><item><title>How can I add integration for a newsletter service?</title><link>https://www.tntware.com/tntconnect/faqs/en/how-can-i-add-integration-for-a-newsletter-service/revision/4.aspx</link><pubDate>Wed, 18 Sep 2013 19:57:52 GMT</pubDate><guid isPermaLink="false">1fa7c37c-d68d-46f5-9639-4669b01a21c5:482</guid><dc:creator>Troy Wolbrink</dc:creator><comments>https://www.tntware.com/tntconnect/faqs/en/how-can-i-add-integration-for-a-newsletter-service/comments.aspx</comments><description>Revision 4 posted to Frequently Asked Questions by Troy Wolbrink on 9/18/2013 7:57:52 PM&lt;br /&gt;
&lt;h2&gt;How can I add integration for a newsletter service?&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Filed under: Developer Guides&lt;/div&gt;

&lt;p&gt;You need to host a simple text file on your site that describes to TntMPD what your various endpoints are.&amp;nbsp; It&amp;#39;s in the &amp;quot;ini&amp;quot; format.&amp;nbsp; As an example, here&amp;#39;s some actual endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[simple] &lt;a href="http://www.chalkline.org/ini.txt"&gt;http://www.chalkline.org/ini.txt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[advanced] &lt;a href="http://www.prayerletters.com/tntmpd/integration.ini"&gt;http://www.prayerletters.com/tntmpd/integration.ini&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The ini file has several sections ( &lt;span style="color:#0000ff;"&gt;//comments in blue&lt;/span&gt; should not be in actual file):&lt;/p&gt;
&lt;p&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;[APPLICATION]&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;MinimumVersion&lt;/strong&gt;=3.0.17&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;// minimum version of TntMPD required&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;RecommendedVersion&lt;/strong&gt;=3.0.17&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;// recommended version of TntMPD&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;strong&gt;[LetterService]&lt;br /&gt;&lt;/strong&gt;&lt;span style="color:#0000ff;"&gt;// if you move your query.ini url, you can put in a redirect here to update TntMPD&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;RedirectQueryIni&lt;/strong&gt;=&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// url to&amp;nbsp;your logo (300x100)&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;LogoUrl&lt;/strong&gt;=http://www.example.com/static/images/logo100.png&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// url for new customer to learn about your service&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AboutUrl&lt;/strong&gt;=http://www.example.com/tntmpd&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// for simple integration, just provide a url to TntMPD-specific instructions &amp;hellip; &lt;strong&gt;done! &amp;hellip; stop here&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;HowToOrderUrl&lt;/strong&gt;=http://www.example.org/TNTMPDInstructions.pdf&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// advanced: optional way to allow for authentication persistence via OAUTH access token&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AccessTokenRequestUrl&lt;/strong&gt;=https://www.example.com/tntmpd/authorize?tntdb=$TNTMPD_DATABASE$&lt;br /&gt;&lt;strong&gt;AccessTokenCompleteUrl&lt;/strong&gt;=https://www.example.com/tntmpd/authorize_callback&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// advanced: optional endpoint for TntMPD to revoke access tokens&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AccessTokenRevokeUrl&lt;/strong&gt;=https://www.example.com/tntmpd/authorize_revoke?token=$ACCESS_TOKEN$&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// advanced integration:&amp;nbsp; provide url to upload CSV of partners&lt;br /&gt;// return url to launch in user&amp;#39;s default browser to complete order&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;CsvFieldNamesAreLocalized&lt;/strong&gt;=FALSE&lt;br /&gt;&lt;strong&gt;CsvUploadUrl&lt;/strong&gt;=https://www.example.com/tntmpd/upload_file?v=1&amp;amp;ACCESS_TOKEN$&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;h2&gt;For simple integration...&lt;/h2&gt;
&lt;p&gt;You can stop with &amp;quot;&lt;strong&gt;HowToOrderUrl&lt;/strong&gt;&amp;quot;.&amp;nbsp; The integration will look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/4353.chalk-line.png"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/4353.chalk-line.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;For advanced integration...&lt;/h2&gt;
&lt;p&gt;You must provide the &amp;quot;CsvUploadUrl&amp;quot;.&amp;nbsp; The integration will look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/8611.prayer-letters-com.png"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/8611.prayer-letters-com.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Authentication is optional, but if you want to provide&amp;nbsp;TntMPD with an OAUTH token, you can.&amp;nbsp; The benefit is that the user doesn&amp;#39;t have to login to your service each month to send their newsletter.&amp;nbsp; To provide for OAUTH authentication, you must provide the following endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AccessTokenRequestUrl&lt;/li&gt;
&lt;li&gt;AccessTokenCompleteUrl&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you include $TNTMPD_DATABASE$ in your AccessTokenRequestUrl, it will be substituted for the name of the current TntMPD database file.&amp;nbsp; This way you can associate tokens with TntMPD databases for future reference.&amp;nbsp; Once user is logged in, redirect the user to the AccessTokenCompleteUrl with the access token in the fragment portion of&amp;nbsp;the&amp;nbsp;url&amp;nbsp;as &lt;strong&gt;#access_token=xxxxx&lt;/strong&gt;&amp;nbsp;&amp;nbsp; In the CsvUploadUrl, $ACCESS_TOKEN$ is substituted for the OAUTH access token.&lt;/p&gt;
&lt;p&gt;If you don&amp;#39;t want to support an OAUTH access token, don&amp;#39;t include any of the AccessToken* urls, and don&amp;#39;t include $ACCESS_TOKEN$ in our CsvUploadUrl.&lt;/p&gt;
&lt;h2&gt;CsvUploadUrl&lt;/h2&gt;
&lt;p&gt;TntMPD will POST the&amp;nbsp;&lt;a href="/tntmpd/help/en/pages/groups_current.aspx"&gt;current group &lt;/a&gt;as UTF-8&amp;nbsp;CSV text in the body of request.&lt;/p&gt;
&lt;p&gt;If there is an error, the service should return:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP 401 if access token is invalid and needs to be reaquired.&lt;/li&gt;
&lt;li&gt;or HTTP status 200, with &amp;ldquo;ERROR&amp;rdquo; on first line of body, actual error message on 2nd line.&lt;br /&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ERROR&lt;br /&gt;Example error message&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;If successful, return either:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP 200, with body of &amp;ldquo;LaunchBrowserUrl=xxxxxx&amp;rdquo;&amp;nbsp;&lt;br /&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="background: SpringGreen;"&gt;LaunchBrowserUrl=http://www.example.com/startorder?id=123123&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;li&gt;or a standard HTTP redirect (HTTP 301/302/303 w/ Location header)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The user&amp;#39;s default browser will then be launched with the url&amp;nbsp;returned so they can complete the order.&lt;/p&gt;
&lt;h2&gt;HOW TO TEST&lt;/h2&gt;
&lt;p&gt;To test your ini url, hold down the Ctrl (or Command key on a Mac)&amp;nbsp;key and right-click on&amp;nbsp;the drop down list:&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/2744.add-test-url.png"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/2744.add-test-url.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;READY?&lt;/h2&gt;
&lt;p&gt;When you have your url ready, send me an email at: &lt;a href="mailto:troy.wolbrink@ccci.org"&gt;troy.wolbrink@ccci.org&lt;/a&gt;.&amp;nbsp; Tell me the NAME and URL in the email.&amp;nbsp; Once I&amp;nbsp;add you to the official list, TntMPD will be updated immediately.&lt;/p&gt;</description></item><item><title>How can I add integration for a newsletter service?</title><link>https://www.tntware.com/tntconnect/faqs/en/how-can-i-add-integration-for-a-newsletter-service/revision/3.aspx</link><pubDate>Wed, 18 Sep 2013 19:56:23 GMT</pubDate><guid isPermaLink="false">1fa7c37c-d68d-46f5-9639-4669b01a21c5:481</guid><dc:creator>Troy Wolbrink</dc:creator><comments>https://www.tntware.com/tntconnect/faqs/en/how-can-i-add-integration-for-a-newsletter-service/comments.aspx</comments><description>Revision 3 posted to Frequently Asked Questions by Troy Wolbrink on 9/18/2013 7:56:23 PM&lt;br /&gt;
&lt;h2&gt;How can I add integration for a newsletter service?&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Filed under: Developer Guides&lt;/div&gt;

&lt;p&gt;You need to host a simple text file on your site that describes to TntMPD what your various endpoints are.&amp;nbsp; It&amp;#39;s in the &amp;quot;ini&amp;quot; format.&amp;nbsp; As an example, here&amp;#39;s some actual endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[simple] &lt;a href="http://www.chalkline.org/ini.txt"&gt;http://www.chalkline.org/ini.txt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[advanced] &lt;a href="http://www.prayerletters.com/tntmpd/integration.ini"&gt;http://www.prayerletters.com/tntmpd/integration.ini&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The ini file has several sections ( &lt;span style="color:#0000ff;"&gt;//comments in blue&lt;/span&gt; should not be in actual file):&lt;/p&gt;
&lt;p&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;[APPLICATION]&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;MinimumVersion&lt;/strong&gt;=3.0.17&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;// minimum version of TntMPD required&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;RecommendedVersion&lt;/strong&gt;=3.0.17&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;// recommended version of TntMPD&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;strong&gt;[LetterService]&lt;br /&gt;&lt;/strong&gt;&lt;span style="color:#0000ff;"&gt;// if you move your query.ini url, you can put in a redirect here to update TntMPD&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;RedirectQueryIni&lt;/strong&gt;=&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// url to&amp;nbsp;your logo (300x100)&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;LogoUrl&lt;/strong&gt;=http://www.example.com/static/images/logo100.png&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// url for new customer to learn about your service&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AboutUrl&lt;/strong&gt;=http://www.example.com/tntmpd&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// for simple integration, just provide a url to TntMPD-specific instructions &amp;hellip; &lt;strong&gt;done! &amp;hellip; stop here&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;HowToOrderUrl&lt;/strong&gt;=http://www.example.org/TNTMPDInstructions.pdf&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// advanced: optional way to allow for authentication persistence via OAUTH access token&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AccessTokenRequestUrl&lt;/strong&gt;=https://www.example.com/tntmpd/authorize?tntdb=$TNTMPD_DATABASE$&lt;br /&gt;&lt;strong&gt;AccessTokenCompleteUrl&lt;/strong&gt;=https://www.example.com/tntmpd/authorize_callback&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// advanced: optional endpoint for TntMPD to revoke access tokens&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AccessTokenRevokeUrl&lt;/strong&gt;=https://www.example.com/tntmpd/authorize_revoke?token=$ACCESS_TOKEN$&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// advanced integration:&amp;nbsp; provide url to upload CSV of partners&lt;br /&gt;// return url to launch in user&amp;#39;s default browser to complete order&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;CsvFieldNamesAreLocalized&lt;/strong&gt;=FALSE&lt;br /&gt;&lt;strong&gt;CsvUploadUrl&lt;/strong&gt;=https://www.example.com/tntmpd/upload_file?v=1&amp;amp;ACCESS_TOKEN$&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;h2&gt;For simple integration...&lt;/h2&gt;
&lt;p&gt;You can stop with &amp;quot;&lt;strong&gt;HowToOrderUrl&lt;/strong&gt;&amp;quot;.&amp;nbsp; The integration will look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/4353.chalk-line.png"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/4353.chalk-line.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;For advanced integration...&lt;/h2&gt;
&lt;p&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;you&lt;/span&gt; &lt;/h2&gt;
&lt;p&gt;&lt;span style="background: SpringGreen;"&gt;You&lt;/span&gt; must provide the &amp;quot;CsvUploadUrl&amp;quot;.&amp;nbsp; The integration will look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/8611.prayer-letters-com.png"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/8611.prayer-letters-com.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Authentication is optional, but if you want to provide&amp;nbsp;TntMPD with an OAUTH token, you can.&amp;nbsp; The benefit is that the user doesn&amp;#39;t have to login to your service each month to send their newsletter.&amp;nbsp; To provide for OAUTH authentication, you must provide the following endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AccessTokenRequestUrl&lt;/li&gt;
&lt;li&gt;AccessTokenCompleteUrl&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you include $TNTMPD_DATABASE$ in your AccessTokenRequestUrl, it will be substituted for the name of the current TntMPD database file.&amp;nbsp; This way you can associate tokens with TntMPD databases for future reference.&amp;nbsp; Once user is logged in, redirect the user to the AccessTokenCompleteUrl with the access token in the fragment portion of&amp;nbsp;the&amp;nbsp;url&amp;nbsp;as &lt;strong&gt;#access_token=xxxxx&lt;/strong&gt;&amp;nbsp;&amp;nbsp; In the CsvUploadUrl, $ACCESS_TOKEN$ is substituted for the OAUTH access token.&lt;/p&gt;
&lt;p&gt;If you don&amp;#39;t want to support an OAUTH access token, don&amp;#39;t include any of the AccessToken* urls, and don&amp;#39;t include $ACCESS_TOKEN$ in our CsvUploadUrl.&lt;/p&gt;
&lt;h2&gt;CsvUploadUrl&lt;/h2&gt;
&lt;p&gt;TntMPD will POST the&amp;nbsp;&lt;a href="/tntmpd/help/en/pages/groups_current.aspx"&gt;current group &lt;/a&gt;as UTF-8&amp;nbsp;CSV text in the body of request.&lt;/p&gt;
&lt;p&gt;If there is an error, the service should return:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP 401 if access token is invalid and needs to be reaquired.&lt;/li&gt;
&lt;li&gt;or HTTP status 200, with &amp;ldquo;ERROR&amp;rdquo; on first line of body, actual error message on 2nd line.&lt;br /&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ERROR&lt;br /&gt;Example error message&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;If successful, return either:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP 200, with body of &amp;ldquo;LaunchBrowserUrl=xxxxxx&amp;rdquo;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;or a standard HTTP redirect (HTTP 301/302/303 w/ Location header)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The user&amp;#39;s default browser will then be launched with the url&amp;nbsp;returned so they can complete the order.&lt;/p&gt;
&lt;h2&gt;HOW TO TEST&lt;/h2&gt;
&lt;p&gt;To test your ini url, hold down the Ctrl (or Command key on a Mac)&amp;nbsp;key and right-click on&amp;nbsp;the drop down list:&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/2744.add-test-url.png"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/2744.add-test-url.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;READY?&lt;/h2&gt;
&lt;p&gt;When you have your url ready, send me an email at: &lt;a href="mailto:troy.wolbrink@ccci.org"&gt;troy.wolbrink@ccci.org&lt;/a&gt;.&amp;nbsp; Tell me the NAME and URL in the email.&amp;nbsp; Once I&amp;nbsp;add you to the official list, TntMPD will be updated immediately.&lt;/p&gt;</description></item><item><title>How can I add integration for a newsletter service?</title><link>https://www.tntware.com/tntconnect/faqs/en/how-can-i-add-integration-for-a-newsletter-service/revision/2.aspx</link><pubDate>Wed, 18 Sep 2013 19:53:10 GMT</pubDate><guid isPermaLink="false">1fa7c37c-d68d-46f5-9639-4669b01a21c5:480</guid><dc:creator>Troy Wolbrink</dc:creator><comments>https://www.tntware.com/tntconnect/faqs/en/how-can-i-add-integration-for-a-newsletter-service/comments.aspx</comments><description>Revision 2 posted to Frequently Asked Questions by Troy Wolbrink on 9/18/2013 7:53:10 PM&lt;br /&gt;
&lt;h2&gt;How can I add integration for a newsletter service?&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Filed under: Developer Guides&lt;/div&gt;

&lt;p&gt;You need to host a simple text file on your site that describes to TntMPD what your various endpoints are.&amp;nbsp; It&amp;#39;s in the &amp;quot;ini&amp;quot; format.&amp;nbsp; As an example, here&amp;#39;s some actual endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[simple] &lt;a href="http://www.chalkline.org/ini.txt"&gt;http://www.chalkline.org/ini.txt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[advanced] &lt;a href="http://www.prayerletters.com/tntmpd/integration.ini"&gt;http://www.prayerletters.com/tntmpd/integration.ini&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The ini file has several sections ( &lt;span style="color:#0000ff;"&gt;//comments in blue&lt;/span&gt; should not be in actual file):&lt;/p&gt;
&lt;p&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;[APPLICATION]&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;MinimumVersion&lt;/strong&gt;=3.0.17&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;// minimum version of TntMPD required&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;RecommendedVersion&lt;/strong&gt;=3.0.17&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;// recommended version of TntMPD&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;strong&gt;[LetterService]&lt;br /&gt;&lt;/strong&gt;&lt;span style="color:#0000ff;"&gt;// if you move your query.ini url, you can put in a redirect here to update TntMPD&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;RedirectQueryIni&lt;/strong&gt;=&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// url to&amp;nbsp;your logo (300x100)&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;LogoUrl&lt;/strong&gt;=http://www.example.com/static/images/logo100.png&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// url for new customer to learn about your service&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AboutUrl&lt;/strong&gt;=http://www.example.com/tntmpd&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// for simple integration, just provide a url to TntMPD-specific instructions &amp;hellip; &lt;strong&gt;done! &amp;hellip; stop here&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;HowToOrderUrl&lt;/strong&gt;=http://www.example.org/TNTMPDInstructions.pdf&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// advanced: optional way to allow for authentication persistence via OAUTH access token&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AccessTokenRequestUrl&lt;/strong&gt;=https://www.example.com/tntmpd/authorize?tntdb=$TNTMPD_DATABASE$&lt;br /&gt;&lt;strong&gt;AccessTokenCompleteUrl&lt;/strong&gt;=https://www.example.com/tntmpd/authorize_callback&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// advanced: optional endpoint for TntMPD to revoke access tokens&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AccessTokenRevokeUrl&lt;/strong&gt;=https://www.example.com/tntmpd/authorize_revoke?token=$ACCESS_TOKEN$&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// advanced integration:&amp;nbsp; provide url to upload CSV of partners&lt;br /&gt;// return url to launch in user&amp;#39;s default browser to complete order&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;CsvFieldNamesAreLocalized&lt;/strong&gt;=FALSE&lt;br /&gt;&lt;strong&gt;CsvUploadUrl&lt;/strong&gt;=https://www.example.com/tntmpd/upload_file?v=1&amp;amp;ACCESS_TOKEN$&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;h2&gt;For simple &lt;span style="text-decoration: line-through; color: red;"&gt;integration&lt;/span&gt;&lt;/strong&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;you&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;integration..&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="background: SpringGreen;"&gt;You&lt;/span&gt; can stop with &amp;quot;&lt;strong&gt;HowToOrderUrl&lt;/strong&gt;&amp;quot;.&amp;nbsp; The integration will look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/4353.chalk-line.png"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/4353.chalk-line.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;For advanced &lt;span style="text-decoration: line-through; color: red;"&gt;integration&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;integration..&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;you must provide the &amp;quot;CsvUploadUrl&amp;quot;.&amp;nbsp; The integration will look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/8611.prayer-letters-com.png"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/8611.prayer-letters-com.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Authentication is optional, but if you want to provide&amp;nbsp;TntMPD with an OAUTH token, you can.&amp;nbsp; The benefit is that the user doesn&amp;#39;t have to login to your service each month to send their newsletter.&amp;nbsp; To provide for OAUTH authentication, you must provide the following endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AccessTokenRequestUrl&lt;/li&gt;
&lt;li&gt;AccessTokenCompleteUrl&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you include $TNTMPD_DATABASE$ in your AccessTokenRequestUrl, it will be substituted for the name of the current TntMPD database file.&amp;nbsp; This way you can associate tokens with TntMPD databases for future reference.&amp;nbsp; Once user is logged in, redirect the user to the AccessTokenCompleteUrl with the access token in the fragment portion of&amp;nbsp;the&amp;nbsp;url&amp;nbsp;as &lt;strong&gt;#access_token=xxxxx&lt;/strong&gt;&amp;nbsp;&amp;nbsp; In the CsvUploadUrl, $ACCESS_TOKEN$ is substituted for the OAUTH access token.&lt;/p&gt;
&lt;p&gt;If you don&amp;#39;t want to support an OAUTH access token, don&amp;#39;t include any of the AccessToken* urls, and don&amp;#39;t include $ACCESS_TOKEN$ in our CsvUploadUrl.&lt;/p&gt;
&lt;h2&gt;CsvUploadUrl&lt;/h2&gt;
&lt;p&gt;TntMPD will POST the&amp;nbsp;&lt;a href="/tntmpd/help/en/pages/groups_current.aspx"&gt;current group &lt;/a&gt;as UTF-8&amp;nbsp;CSV text in the body of request.&lt;/p&gt;
&lt;p&gt;If there is an error, the service should return:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP 401 if access token is invalid and needs to be reaquired.&lt;/li&gt;
&lt;li&gt;or HTTP status 200, with &amp;ldquo;ERROR&amp;rdquo; on first line of body, actual error message on 2nd line.&lt;br /&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ERROR&lt;br /&gt;Example error message&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;If successful, return either:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP 200, with body of &amp;ldquo;LaunchBrowserUrl=xxxxxx&amp;rdquo;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;or a standard HTTP redirect (HTTP 301/302/303 w/ Location header)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The user&amp;#39;s default browser will then be launched with the url&amp;nbsp;returned so they can complete the order&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style="background: SpringGreen;"&gt;HOW&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;TO&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;TEST&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="background: SpringGreen;"&gt;To&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;test&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;your&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;ini&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;url&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;hold&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;down&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Ctrl&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;(&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;or&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Command&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;key&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;on&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;a&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Mac&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;)&lt;/span&gt;&amp;nbsp;&lt;span style="background: SpringGreen;"&gt;key&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;and&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;right-click&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;on&lt;/span&gt;&amp;nbsp;&lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;drop&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;down&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;list&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/2744.add-test-url.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/2744.add-test-url.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style="background: SpringGreen;"&gt;READY&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;?&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="background: SpringGreen;"&gt;When&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;you&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;have&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;your&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;url&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;ready&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;send&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;me&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;an&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;email&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;at&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt; &lt;a href="mailto:troy.wolbrink@ccci.org"&gt;&lt;span style="background: SpringGreen;"&gt;troy.wolbrink@ccci.org&lt;/span&gt;&lt;/a&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&amp;nbsp; &lt;span style="background: SpringGreen;"&gt;Tell&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;me&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;NAME&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;and&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;URL&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;in&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;email&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&amp;nbsp; &lt;span style="background: SpringGreen;"&gt;Once&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;I&lt;/span&gt;&amp;nbsp;&lt;span style="background: SpringGreen;"&gt;add&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;you&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;to&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;official&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;list&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;TntMPD&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;will&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;be&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;updated&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;immediately&lt;/span&gt;.&lt;/p&gt;</description></item><item><title>How can I add integration for a newsletter service?</title><link>https://www.tntware.com/tntconnect/faqs/en/how-can-i-add-integration-for-a-newsletter-service/revision/1.aspx</link><pubDate>Wed, 18 Sep 2013 19:49:21 GMT</pubDate><guid isPermaLink="false">1fa7c37c-d68d-46f5-9639-4669b01a21c5:479</guid><dc:creator>Troy Wolbrink</dc:creator><comments>https://www.tntware.com/tntconnect/faqs/en/how-can-i-add-integration-for-a-newsletter-service/comments.aspx</comments><description>Revision 1 posted to Frequently Asked Questions by Troy Wolbrink on 9/18/2013 7:49:21 PM&lt;br /&gt;
&lt;p&gt;You need to host a simple text file on your site that describes to TntMPD what your various endpoints are.&amp;nbsp; It&amp;#39;s in the &amp;quot;ini&amp;quot; format.&amp;nbsp; As an example, here&amp;#39;s some actual endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[simple] &lt;a href="http://www.chalkline.org/ini.txt"&gt;http://www.chalkline.org/ini.txt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[advanced] &lt;a href="http://www.prayerletters.com/tntmpd/integration.ini"&gt;http://www.prayerletters.com/tntmpd/integration.ini&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The ini file has several sections ( &lt;span style="color:#0000ff;"&gt;//comments in blue&lt;/span&gt; should not be in actual file):&lt;/p&gt;
&lt;p&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;[APPLICATION]&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;MinimumVersion&lt;/strong&gt;=3.0.17&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;// minimum version of TntMPD required&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;RecommendedVersion&lt;/strong&gt;=3.0.17&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000ff;"&gt;// recommended version of TntMPD&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;strong&gt;[LetterService]&lt;br /&gt;&lt;/strong&gt;&lt;span style="color:#0000ff;"&gt;// if you move your query.ini url, you can put in a redirect here to update TntMPD&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;RedirectQueryIni&lt;/strong&gt;=&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// url to&amp;nbsp;your logo (300x100)&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;LogoUrl&lt;/strong&gt;=http://www.example.com/static/images/logo100.png&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// url for new customer to learn about your service&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AboutUrl&lt;/strong&gt;=http://www.example.com/tntmpd&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// for simple integration, just provide a url to TntMPD-specific instructions &amp;hellip; &lt;strong&gt;done! &amp;hellip; stop here&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;HowToOrderUrl&lt;/strong&gt;=http://www.example.org/TNTMPDInstructions.pdf&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// advanced: optional way to allow for authentication persistence via OAUTH access token&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AccessTokenRequestUrl&lt;/strong&gt;=https://www.example.com/tntmpd/authorize?tntdb=$TNTMPD_DATABASE$&lt;br /&gt;&lt;strong&gt;AccessTokenCompleteUrl&lt;/strong&gt;=https://www.example.com/tntmpd/authorize_callback&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// advanced: optional endpoint for TntMPD to revoke access tokens&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;AccessTokenRevokeUrl&lt;/strong&gt;=https://www.example.com/tntmpd/authorize_revoke?token=$ACCESS_TOKEN$&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// advanced integration:&amp;nbsp; provide url to upload CSV of partners&lt;br /&gt;// return url to launch in user&amp;#39;s default browser to complete order&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;CsvFieldNamesAreLocalized&lt;/strong&gt;=FALSE&lt;br /&gt;&lt;strong&gt;CsvUploadUrl&lt;/strong&gt;=https://www.example.com/tntmpd/upload_file?v=1&amp;amp;ACCESS_TOKEN$&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;For &lt;strong&gt;simple integration&lt;/strong&gt;, you can stop with &amp;quot;&lt;strong&gt;HowToOrderUrl&lt;/strong&gt;&amp;quot;.&amp;nbsp; The integration will look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/4353.chalk-line.png"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/4353.chalk-line.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For advanced integration, you must provide the &amp;quot;CsvUploadUrl&amp;quot;.&amp;nbsp; The integration will look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="/tntmpd/cfs-file.ashx/__key/CommunityServer.Wikis.Components.Files/en/8611.prayer-letters-com.png"&gt;&lt;img src="/tntmpd/cfs-filesystemfile.ashx/__key/CommunityServer.Components.ImageFileViewer/CommunityServer.Wikis.Components.Files.en/8611.prayer-letters-com.png_2D00_550x0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Authentication is optional, but if you want to provide&amp;nbsp;TntMPD with an OAUTH token, you can.&amp;nbsp; The benefit is that the user doesn&amp;#39;t have to login to your service each month to send their newsletter.&amp;nbsp; To provide for OAUTH authentication, you must provide the following endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AccessTokenRequestUrl&lt;/li&gt;
&lt;li&gt;AccessTokenCompleteUrl&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you include $TNTMPD_DATABASE$ in your AccessTokenRequestUrl, it will be substituted for the name of the current TntMPD database file.&amp;nbsp; This way you can associate tokens with TntMPD databases for future reference.&amp;nbsp; Once user is logged in, redirect the user to the AccessTokenCompleteUrl with the access token in the fragment portion of&amp;nbsp;the&amp;nbsp;url&amp;nbsp;as &lt;strong&gt;#access_token=xxxxx&lt;/strong&gt;&amp;nbsp;&amp;nbsp; In the CsvUploadUrl, $ACCESS_TOKEN$ is substituted for the OAUTH access token.&lt;/p&gt;
&lt;p&gt;If you don&amp;#39;t want to support an OAUTH access token, don&amp;#39;t include any of the AccessToken* urls, and don&amp;#39;t include $ACCESS_TOKEN$ in our CsvUploadUrl.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CsvUploadUrl&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;TntMPD will POST the&amp;nbsp;&lt;a href="http://www.tntware.com/tntmpd/help/en/pages/groups_current.aspx"&gt;current group &lt;/a&gt;as UTF-8&amp;nbsp;CSV text in the body of request.&lt;/p&gt;
&lt;p&gt;If there is an error, the service should return:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP 401 if access token is invalid and needs to be reaquired.&lt;/li&gt;
&lt;li&gt;or HTTP status 200, with &amp;ldquo;ERROR&amp;rdquo; on first line of body, actual error message on 2nd line.&lt;br /&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ERROR&lt;br /&gt;Example error message&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;If successful, return either:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP 200, with body of &amp;ldquo;LaunchBrowserUrl=xxxxxx&amp;rdquo;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;or a standard HTTP redirect (HTTP 301/302/303 w/ Location header)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The user&amp;#39;s default browser will then be launched with the url&amp;nbsp;returned so they can complete the order.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item></channel></rss>