<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://sugarclub.sugarcrm.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Using Sugar web logic hooks with ngrok and Flask</title><link>https://sugarclub.sugarcrm.com/dev-club/f/questions-answers/1772/using-sugar-web-logic-hooks-with-ngrok-and-flask</link><description>I am trying to retrieve data from a Sugar web logic hook using ngrok for a public url and Flask as my web server. (I‘m using the method shown in this video: https://www.youtube.com/watch?v=YMBzb_RBDAA&amp;amp;t=664s ) I know the ngrok url and Flask application</description><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>RE: Using Sugar web logic hooks with ngrok and Flask</title><link>https://sugarclub.sugarcrm.com/thread/20659?ContentTypeID=1</link><pubDate>Fri, 18 Sep 2020 08:51:29 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:a2d1c5ce-948f-42a1-85bc-aa2c36108663</guid><dc:creator>Neeraja P</dc:creator><description>&lt;p&gt;Hi &lt;a href="/members/greg-billings"&gt;Greg Billings&lt;/a&gt;&amp;nbsp; / &lt;a href="/members/niklas_5f00_exsitec"&gt;Niklas Johansson&lt;/a&gt;,&lt;/p&gt;
&lt;p&gt;I had a similar issue and&amp;nbsp;when I debugged the issue further,&amp;nbsp;I noticed that the web logic hooks timeout in 1 second. - which is why the connection will be closed by Sugar even before transmitting the whole data.&lt;/p&gt;
&lt;p&gt;Because of a known issue,&amp;nbsp; the web logic hook dumps the entire content of the case and other unnecessary details, which makes the payload huge - in the order of 8-10 MB. This is the bug&amp;nbsp;report&amp;nbsp;-&amp;nbsp;&lt;a href="https://portal.sugarondemand.com/#supp_Bugs/82879"&gt;portal.sugarondemand.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;But even with that fix, Sugar will still terminate the web hook after 1 second, so we should ensure we get the data from sugar before that one second. It is not configurable right now, but you can request Sugar to do so.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;But - there are code alternatives to fix this issue, by extending the WebLogicHook bean and customizing the timeout ourselves.&lt;/p&gt;
&lt;p&gt;Eg: Use this method to customize WebLogicHook bean:&amp;nbsp;&lt;a href="https://support.sugarcrm.com/Documentation/Sugar_Developer/Sugar_Developer_Guide_10.0/Data_Framework/Models/SugarBean/Customizing_Core_SugarBeans/"&gt;https://support.sugarcrm.com/Documentation/Sugar_Developer/Sugar_Developer_Guide_10.0/Data_Framework/Models/SugarBean/Customizing_Core_SugarBeans/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We have to modify the &lt;em&gt;run&lt;/em&gt; function,&amp;nbsp;with increased timeout:&lt;/p&gt;
&lt;pre&gt;&lt;span&gt;public function &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$data&lt;/span&gt;&lt;span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$data &lt;/span&gt;&lt;span&gt;= &lt;/span&gt;&lt;span&gt;unserialize&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$data&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$payload &lt;/span&gt;&lt;span&gt;= &lt;/span&gt;&lt;span&gt;json_encode&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$data&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;'payload'&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$curlHandler &lt;/span&gt;&lt;span&gt;= &lt;/span&gt;&lt;span&gt;curl_init&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$options &lt;/span&gt;&lt;span&gt;= &lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;(&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        CURLOPT_HTTPHEADER      &lt;/span&gt;&lt;span&gt;=&amp;gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;CURLOPT_RETURNTRANSFER  &lt;/span&gt;&lt;span&gt;=&amp;gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;CURLOPT_CONNECTTIMEOUT  &lt;/span&gt;&lt;span&gt;=&amp;gt; &lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;CURLOPT_TIMEOUT         &lt;/span&gt;&lt;span&gt;=&amp;gt; 5&lt;/span&gt;&lt;span&gt;, // NOTE - This is the customization, increase timeout from 1s to 5s&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;CURLOPT_MAXREDIRS       &lt;/span&gt;&lt;span&gt;=&amp;gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;CURLOPT_USERAGENT       &lt;/span&gt;&lt;span&gt;=&amp;gt; &lt;/span&gt;&lt;span&gt;&amp;#39;SugarCrm&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;CURLOPT_VERBOSE         &lt;/span&gt;&lt;span&gt;=&amp;gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;CURLOPT_URL             &lt;/span&gt;&lt;span&gt;=&amp;gt; &lt;/span&gt;&lt;span&gt;$data&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;'url'&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;CURLOPT_HTTPHEADER      &lt;/span&gt;&lt;span&gt;=&amp;gt; &lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;(&lt;br /&gt;&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&amp;#39;Content-Type: application/json&amp;#39;&lt;/span&gt;&lt;span&gt;,                                                                                &lt;br /&gt;&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&amp;#39;Content-Length: &amp;#39; &lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;strlen&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$payload&lt;/span&gt;&lt;span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        )&lt;/span&gt;&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;CURLOPT_POSTFIELDS      &lt;/span&gt;&lt;span&gt;=&amp;gt; &lt;/span&gt;&lt;span&gt;$payload&lt;/span&gt;&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;CURLOPT_CUSTOMREQUEST   &lt;/span&gt;&lt;span&gt;=&amp;gt; &lt;/span&gt;&lt;span&gt;$data&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;'request_method'&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;curl_setopt_array&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$curlHandler&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$options&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;false &lt;/span&gt;&lt;span&gt;=== &lt;/span&gt;&lt;span&gt;curl_exec&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$curlHandler&lt;/span&gt;&lt;span&gt;)) {&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;$GLOBALS&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;'log'&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;#39;WebLogicHook failed: &amp;#39; &lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;curl_error&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$curlHandler&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;curl_close&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$curlHandler&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$this&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;job&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;succeedJob&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return true&lt;/span&gt;&lt;span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Using Sugar web logic hooks with ngrok and Flask</title><link>https://sugarclub.sugarcrm.com/thread/20653?ContentTypeID=1</link><pubDate>Thu, 17 Sep 2020 13:22:55 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:366d43c2-7e07-40b8-a51e-c20d705d33c5</guid><dc:creator>Niklas Johansson</dc:creator><description>&lt;p&gt;Hi Greg!&lt;/p&gt;
&lt;p&gt;Not sure if this is still relevant for you, I&amp;#39;ve been looking into this myself recently. We might be able to help each other.&lt;/p&gt;
&lt;p&gt;I could recommend&amp;nbsp;&lt;a href="https://webhook.site/"&gt;https://webhook.site/&lt;/a&gt;&amp;nbsp;in order to troubleshoot, this is basically a listener that shows whatever is received.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve been able to receive data&amp;nbsp;when updating records (Contacts) here at least. But actually nothing when creating new records, not sure if this is a configuration error by me or bug.&lt;/p&gt;
&lt;p&gt;Any luck for you?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>